从 Xcode 项目中导出 .ipa 文件而无需打开 Xcode
Export .ipa file from Xcode project without ever opening Xcode
我们有一个API,用户可以调用它来创建Cordovaapps/projects,上传他们的www目录,然后开始编译并下载可执行的二进制文件。然后这个二进制文件将进入私人应用商店。
我在 iOS 的编译步骤中遇到问题。 Cordova 构建步骤没有问题,但它不会像 Android 那样输出二进制文件。在阅读了我在 Whosebug 和其他地方找到的所有内容后,计划是这样的:
xcodebuild clean -configuration Release -alltargets
xcodebuild -scheme MyApp archive -archivePath build/MyApp
xcodebuild -exportArchive -exportFormat ipa -archivePath "build/MyApp.xcarchive" -exportPath "MyApp.ipa" -exportProvisioningProfile "My Prov Profile"
鉴于签名身份和所有设置都正确,它几乎可以工作。第一个命令执行正常。第二个命令挂起。
但是,如果我在 Xcode 中打开项目,然后执行命令,它会编译和导出,并且会留下一个 .ipa 文件,这正是我想要的。貌似Xcode在项目刚打开的时候就设置了一个workspace和一些scheme相关的东西。
有什么方法可以让 xcodebuild(或 xcrun,或其他任何东西)为我创建这个工作区文件?
或者有其他方法可以解决这个问题吗?
现在,我有一个解决方案,我实际打开 Xcode 项目,等待 15 秒,然后继续。但是我可以想到一千种在某些时候会失败的方法,所以我想把它改成更优雅的东西。
我目前安装了 Xcode 6.3,如果相关的话。
更新:下面 Opal 的回答让我走上了正确的道路(我认为)。我最终做的是根据 Opal 的 link 导出共享方案,并将其用作未来应用程序的模板。解决方案是这样的:
# Copy shared scheme file into directory
mkdir /path/to/project/dir/MyApp.xcodeproj/xcshareddata
mkdir /path/to/project/dir/MyApp.xcodeproj/xcshareddata/xcschemes
cp data/MyScheme.xcscheme /path/to/project/dir/MyApp.xcodeproj/xcshareddata/xcschemes/.
# Use sed to replace app name in scheme file
sed -i '' "s/%app_name%/MyApp/g" MyApp.xcodeproj/xcshareddata/xcschemes/MyScheme.xcscheme
# CD into directory
cd /path/to/project/dir
# Move files from Cordova to our build directory
cp -r CordovaLib/build/* build/.
# Build and export
xcodebuild clean -configuration Release -alltargets
xcodebuild -scheme MyScheme archive -archivePath build/MyApp
xcodebuild -exportArchive -exportFormat ipa -archivePath "build/MyApp.xcarchive" -exportPath "MyApp.ipa" -exportProvisioningProfile "MyProvProfile"
这些是我在不打开 xcode 我的 cordova 环境中自动生成 ipa 的步骤。 (xcode 版本:6.0.1 cordova 版本:3.6.0)
- cordova/build.xcconfig 中的更改:CODE_SIGN_IDENTITY=iPhone 分发(更改"Developer" 到 "Distribution". )
- 运行
cordova build ios --device
在生成 .app 文件的 cordova 工作区中
- 签名使用:
xcrun -sdk iphoneos PackageApplication -v ${WORKSPACE}/platforms/ios/build/device/${application.name}.app -o ${WORKSPACE}/platforms/ios/build/${application.name}.ipa --embed ${ios.distribution.provisionfile}.mobileprovision --sign ${code.signing.identity}
您尝试构建的应用程序似乎没有共享方案。如果未共享方案,则会在项目加载到 xcode 时创建。要创建共享方案,请参阅 this 站点。
我们有一个API,用户可以调用它来创建Cordovaapps/projects,上传他们的www目录,然后开始编译并下载可执行的二进制文件。然后这个二进制文件将进入私人应用商店。
我在 iOS 的编译步骤中遇到问题。 Cordova 构建步骤没有问题,但它不会像 Android 那样输出二进制文件。在阅读了我在 Whosebug 和其他地方找到的所有内容后,计划是这样的:
xcodebuild clean -configuration Release -alltargets
xcodebuild -scheme MyApp archive -archivePath build/MyApp
xcodebuild -exportArchive -exportFormat ipa -archivePath "build/MyApp.xcarchive" -exportPath "MyApp.ipa" -exportProvisioningProfile "My Prov Profile"
鉴于签名身份和所有设置都正确,它几乎可以工作。第一个命令执行正常。第二个命令挂起。
但是,如果我在 Xcode 中打开项目,然后执行命令,它会编译和导出,并且会留下一个 .ipa 文件,这正是我想要的。貌似Xcode在项目刚打开的时候就设置了一个workspace和一些scheme相关的东西。
有什么方法可以让 xcodebuild(或 xcrun,或其他任何东西)为我创建这个工作区文件?
或者有其他方法可以解决这个问题吗?
现在,我有一个解决方案,我实际打开 Xcode 项目,等待 15 秒,然后继续。但是我可以想到一千种在某些时候会失败的方法,所以我想把它改成更优雅的东西。
我目前安装了 Xcode 6.3,如果相关的话。
更新:下面 Opal 的回答让我走上了正确的道路(我认为)。我最终做的是根据 Opal 的 link 导出共享方案,并将其用作未来应用程序的模板。解决方案是这样的:
# Copy shared scheme file into directory
mkdir /path/to/project/dir/MyApp.xcodeproj/xcshareddata
mkdir /path/to/project/dir/MyApp.xcodeproj/xcshareddata/xcschemes
cp data/MyScheme.xcscheme /path/to/project/dir/MyApp.xcodeproj/xcshareddata/xcschemes/.
# Use sed to replace app name in scheme file
sed -i '' "s/%app_name%/MyApp/g" MyApp.xcodeproj/xcshareddata/xcschemes/MyScheme.xcscheme
# CD into directory
cd /path/to/project/dir
# Move files from Cordova to our build directory
cp -r CordovaLib/build/* build/.
# Build and export
xcodebuild clean -configuration Release -alltargets
xcodebuild -scheme MyScheme archive -archivePath build/MyApp
xcodebuild -exportArchive -exportFormat ipa -archivePath "build/MyApp.xcarchive" -exportPath "MyApp.ipa" -exportProvisioningProfile "MyProvProfile"
这些是我在不打开 xcode 我的 cordova 环境中自动生成 ipa 的步骤。 (xcode 版本:6.0.1 cordova 版本:3.6.0)
- cordova/build.xcconfig 中的更改:CODE_SIGN_IDENTITY=iPhone 分发(更改"Developer" 到 "Distribution". )
- 运行
cordova build ios --device
在生成 .app 文件的 cordova 工作区中 - 签名使用:
xcrun -sdk iphoneos PackageApplication -v ${WORKSPACE}/platforms/ios/build/device/${application.name}.app -o ${WORKSPACE}/platforms/ios/build/${application.name}.ipa --embed ${ios.distribution.provisionfile}.mobileprovision --sign ${code.signing.identity}
您尝试构建的应用程序似乎没有共享方案。如果未共享方案,则会在项目加载到 xcode 时创建。要创建共享方案,请参阅 this 站点。