2. Xcode プロジェクトの設定 — xcframeworks のプロジェクト内への配置
ここではマニフェストのマージやリポジトリ URL の設定は不要です。2 つのバイナリフレームワークを、手動で(チームでセットアップスクリプトを用意している場合はそのスクリプトで)Xcode プロジェクトに組み込みます。
2.1 フレームワークの配置場所
AKSKit.xcframework と AppsKit.xcframework を、.xcodeproj があるフォルダの直下に配置します。つまり、Podfile やアプリのソースフォルダと同じ階層です。ソースフォルダ内や Pods/ 内には配置しないでください。Xcode はフォルダ名を含まない相対パスでフレームワークの参照を解決するため、この配置が重要です(FRAMEWORK_SEARCH_PATHS のカスタマイズは不要です)。別の場所に移動すると、プロジェクトファイル内の参照が無効になります。
YourApp/ <- CocoaPods project root (Podfile lives here)
├── Podfile
├── AKSKit.xcframework/ <- sibling of the .xcodeproj
├── AppsKit.xcframework/ <- sibling of the .xcodeproj
├── YourApp.xcodeproj/
├── YourApp.xcworkspace/ <- open THIS, not the .xcodeproj, once Pods are installed
└── YourApp/ <- your app target's source folder
├── AppDelegate.swift
└── ...2.2 ターゲットへの追加
Xcode でアプリのターゲット → General → Frameworks, Libraries, and Embedded Content を選択し、両方の .xcframework ファイルを追加して、それぞれに Embed & Sign を設定します。具体的には、次の状態になっている必要があります。
- 各フレームワークに
PBXFileReferenceがあり、sourceTree = "<group>"と、フォルダの接頭辞を含まないpathが設定されている - 両方が Link Binary With Libraries(
PBXFrameworksBuildPhase)に登録されている - 両方が Embed Frameworks のファイルコピービルドフェーズ(
PBXCopyFilesBuildPhase、dstSubfolderSpec = 10)に登録され、CodeSignOnCopyとRemoveHeadersOnCopy属性が付いている。これは、Xcode の UI で「Embed & Sign」を選択したときに生成される設定そのものです
また、LD_RUNPATH_SEARCH_PATHS に @executable_path/Frameworks が含まれていることも確認してください。Xcode の UI からフレームワークを埋め込むと自動的に追加されます。この設定により、埋め込み済みの署名されたフレームワークを実行時に読み込めます。
Xcode の UI を使わずにスクリプトで設定する場合(CI のセットアップステップなど)、
project.pbxprojに追加する必要があるのは、上記の 3 要素、つまりファイル参照、リンクフェーズ、埋め込みフェーズです。
2.3 プロジェクトではなくワークスペースを開く
pod install の実行後は、YourApp.xcworkspace を開いてください。このワークスペースが、アプリのターゲットと CocoaPods が生成した Pods.xcodeproj を連携させます。.xcodeproj を直接開くと、Podfile に記載された依存関係が正しくリンクされない状態でビルドされます。