🚀

Fastlane で xcframework を作成する方法

2022/09/08に公開

Swift の Package を配布する用の xcframework を Fastlane で作成するのに手間取ったので忘備録。

前提条件

  • pod lib create PackageName でライブラリを作成している状態
  • その際、Example App を一緒に作成している状態
  • podspec 内の s.module_namePackageNameSDK とする

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