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 に記載した依存関係が正しくリンクされない状態でビルドされてしまいます。