🚀
Fastlane で xcframework を作成する方法
Swift の Package を配布する用の xcframework を Fastlane で作成するのに手間取ったので忘備録。
前提条件
-
pod lib create PackageName
でライブラリを作成している状態 - その際、Example App を一緒に作成している状態
- podspec 内の
s.module_name
はPackageNameSDK
とする
Fastlane を使わない場合
Fastlane を使わない場合、以下の手順で xcframework が作成できます。
iOS 用のアーカイブ作成:
xcodebuild archive -workspace PackageName.xcworkspace -scheme 'PackageName' -archivePath build/iphoneos.xcarchive -destination 'generic/platform=iOS' SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
iOS Simulator 用のアーカイブ作成:
xcodebuild archive -workspace PackageName.xcworkspace -scheme 'PackageName' -archivePath build/iphonesimulator.xcarchive -destination 'generic/platform=iOS Simulator' SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcframework の作成
xcodebuild -create-xcframework -framework build/iphoneos.xcarchive/Products/Library/Frameworks/PackageNameSDK.framework -framework build/iphonesimulator.xcarchive/Products/Library/Frameworks/PackageNameSDK.framework -output build/PackageNameSDK.xcframework
アーカイブ作成時の以下のオプションが大事です:
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
: ライブラリを配布するためのビルドを作成するオプション
Fastlane で行う場合
Fastlane で行う場合、以下のように書けば上記コマンドと同じことができます。
lane :build do
xcodebuild(
archive: true,
workspace: "PackageName.xcworkspace",
scheme: "PackageName",
archive_path: "./build/iphoneos.xcarchive",
destination: "generic/platform=iOS",
xcargs: "SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES"
)
xcodebuild(
archive: true,
workspace: "PackageName.xcworkspace",
scheme: "PackageName",
archive_path: "./build/iphonesimulator.xcarchive",
destination: "generic/platform=iOS Simulator",
xcargs: "SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES"
)
create_xcframework(
frameworks: [
'build/iphoneos.xcarchive/Products/Library/Frameworks/PackageNameSDK.framework',
'build/iphonesimulator.xcarchive/Products/Library/Frameworks/PackageNameSDK.framework'
],
output: 'PackageNameSDK.xcframework'
)
end
これで、fastlane build
で xcframework が作成できるようになります。
fastlane の xcodebuild コマンドに用意されていないオプションは xcargs で補完できる事を知らなかったので躓いていました。
Discussion