環境
- Xcode: 12.3 (12C33)
- xcodegen: 2.18.0
前振り
「今度の案件でサードパーティfooのbarってライブラリ使うから導入おなしゃす」
「おけまる」
bar-native-client-sdk-ios
├── FrameworksDevice
│ └── barSDK.framework
└── FrameworksSimulator
└── barSDK.framework
「なん…………だと………!!」
解決: universal framework編
「OK、universal frameworkになってないのね」
> lipo -info bar-native-client-sdk-ios/FrameworksDevice/barSDK.framework
Architectures in the fat file: bar-native-client-sdk-ios/FrameworksDevice/barSDK.framework is architecture: armv7 arm64
> lipo -info bar-native-client-sdk-ios/FrameworksSimulator/barSDK.framework
Architectures in the fat file: bar-native-client-sdk-ios/FrameworksSimulator/barSDK.framework is architecture: x86_64 i386 arm64
「ならこうやってくっつけてっと」
lipo \
bar-native-client-sdk-ios/FrameworksDevice/barSDK.framework \
bar-native-client-sdk-ios/FrameworksSimulator/barSDK.framework \
-create -output build/universal-barSDK.framework
fatal error: /Applications/Xcode-12.3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: bar-native-client-sdk-ios/FrameworksDevice/barSDK.framework and bar-native-client-sdk-ios/FrameworksSimulator/barSDK.framework have the same architectures (arm64) and can't be in the same fat output file
「しまった、arm64がダブってしまった...」
「ならarm64を削除してからっと」
lipo \
-remove arm64 \
bar-native-client-sdk-ios/FrameworksSimulator/barSDK.framework \
-output build/barSDK_no_arm64.framework
lipo \
bar-native-client-sdk-ios/FrameworksDevice/barSDK.framework \
build/barSDK_no_arm64.framework \
-create -output build/universal-barSDK.framework
「でもこれだとM1で動かないんだよね...」
真解決: xcframework編
「Xcode11からxcframeworkが使えるらしいな」
xcodebuild \
-create-xcframework \
-framework bar-native-client-sdk-ios/FrameworksDevice/barSDK.framework \
-framework bar-native-client-sdk-ios/FrameworksSimulator/barSDK.framework \
-output build/barSDK.xcframework
「あとはdependenciesに追加して、ビルドっと」
project.yml
dependencies:
- framework: bar-native-client-sdk-ios/barSDK.xcframework
ld: framework not found barSDK
clang: error: linker command failed with exit code 1 (use -v to see invocation)
「ビルドこけた」
project.yml
sources:
- path: build
optional: true
「sourceに追加してなかったよ」