0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Perforceを使ったUnityビルドでFrameworkがリンクエラーになる

Posted at

Jenkinsを使ってPerforceのdepotからtrunkを取ってきて、UnityアプリのiOS版のビルドをしているのですが、あるときからXcodeでのビルド時にリンクエラーになるようになってしまいました。同じコードベースのAndroid版は問題なし。

ld: framework not found GoogleMobileAds

P4Vでdepotを見ると、確かにフレームワークが無い。でも、なぜかリンク対象になってる。で、Mac内のワークスペースを見ると、なぜかフレームワークがある。でも、中身が無い。…そうか!!

framework.png

iOS(Mac)のフレームワークはMac上では単一のファイルのように見えますが、実際には複数のファイルをまとめたフォルダです。で、不要になったので誰かが削除したんですが、Perforceはフォルダを管理しないので、フレームワーク内のファイルは消されたものの、ローカルにフォルダは残ったままになります。(上記のスクショはファイルがある状態)

で、UnityはAssetsフォルダ内にあるフォルダやファイルを自動的にプロジェクトに登録してしまうので、フォルダの名前(.framework)だけを見てフレームワークであると認識し、中身が無いにもかかわらず登録してしまい、リンクエラーになるわけです。

まとめると、

  • SDK外のフレームワークを取り込んで使っていた
  • 不要になったので関連するファイルを削除した
  • iOS(macOS)のFrameworkはフォルダベース
  • Perforceはファイルしか管理しないのでフォルダだけが残った
  • Unityがフォルダの存在だけを見て自動的にリンク対象にした
  • でも中身が存在しないのでリンクエラー

ということでした。対応策は、

  • Workspaceの設定のAdvancedの"Rmdir: delete workspace directories when empty"にチェックを入れる。
  • JenkinsのP4PluginのOptionsの"RMDIR"にチェックを入れる。

…というところなんですが、一つ問題があって、UnityはAssets内のフォルダやファイルを自動的にプロジェクトに登録する際に、.metaファイルを作ってしまいます。そうなると、フォルダ内にフォルダがある場合は空にならないので削除されません。"Forced"でdepot全体を取り直すか、手作業でフォルダを削除するしかなさそうです。

p4settings.png

workspace_settings.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?