2. Xcodeプロジェクトの設定 — xcframeworkの直接組み込み
ここではマニフェストのマージやリポジトリ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が含まれていることを確認してください(UIからフレームワークを埋め込むと、Xcodeが自動的に追加します。この設定により、埋め込み済みの署名されたフレームワークを実行時に読み込めるようになります)。
XcodeのUIを使わずにスクリプトで設定する場合(CIのセットアップ手順など)、
project.pbxprojに追加する必要があるのは、上記の3つ、つまりファイル参照、リンクフェーズ、埋め込みフェーズです。
2.3 プロジェクトではなくワークスペースを開く
pod installの実行後は、YourApp.xcworkspaceを開いてください。このワークスペースが、アプリのターゲットとCocoaPodsによって生成されたPods.xcodeprojを連携させます。.xcodeprojを直接開くと、Podfileで指定した依存関係が正しくリンクされない状態でビルドされます。