如何使用 Runner.app 创建用于测试的 .ipa 文件?

Posted

技术标签:

【中文标题】如何使用 Runner.app 创建用于测试的 .ipa 文件?【英文标题】:How to create .ipa file for testing using Runner.app? 【发布时间】:2018-12-17 15:56:45 【问题描述】:

我是一名学习 Flutter 的 android 开发人员,我在尝试创建调试 .ipa 文件以进行测试时确实遇到了一些麻烦。

所以,我设法使用终端中的命令创建了 Runner.app 文件:

flutter build ios --debug

Runner.app文件的位置是

my_project_folder/build/ios/iphoneos/Runner.app

接下来要做什么? 另外,有没有办法从 Xcode 创建调试 .ipa 文件? 谢谢。

【问题讨论】:

创建 .ipa 文件 - 逐步完成指南:***.com/a/63517545/10563627 【参考方案1】:

这些是说明中概述的后续步骤(可在此处找到:https://flutter.io/ios-release/):

在 Xcode 中,配置应用版本并构建:

In Xcode, open Runner.xcworkspace in your app’s ios folder.
Select Product > Scheme > Runner.
Select Product > Destination > Generic iOS Device.
Select Runner in the Xcode project navigator, then select the Runner target in the settings view sidebar.
In the Identity section, update the Version to the user-facing version number you wish to publish.
In the Identity section, update the Build identifier to a unique build number used to track this build on iTunes Connect. Each upload requires a unique build number.

最后,创建一个构建存档并将其上传到 iTunes Connect:

Select Product > Archive to produce a build archive.
In the sidebar of the Xcode Organizer window, select your iOS app, then select the build archive you just produced.
Click the Validate… button. If any issues are reported, address them and produce another build. You can reuse the same build ID until you upload an archive.
After the archive has been successfully validated, click Upload to App Store…. You can follow the status of your build in the Activities tab of your app’s details page on iTunes Connect.

【讨论】:

【参考方案2】:

您可以自己创建 .ipa 文件并将 iOS 构建 url 发送给您的客户端或其他人。

跟我来吧:)

1) 通过以下命令生成您的 iOS 版本 -> flutter build ios --release/debug

2) 您将找到您的 Runner.app 示例的确切路径。 -> Built /Users/UserName/Documents/AppName/build/ios/iphoneos/Runner.app. 只需找到这个 Runner.app 文件并将其复制/粘贴到桌面即可。

3) 在桌面上创建文件夹名称为"Payload" (区分大小写)

4) 将您的 Runner.app 文件移动到 "Payload" 文件夹中。

5) 将Payload文件夹压缩为默认.zip

6) 将 Payload.zip 转换/重命名为 Payload.ipa

就是这样。现在您必须打开“Diawi”并上传 Payload.ipa 就可以了。等待100%完成。点击发送按钮。您会找到一个网址,将此网址发送给您的客户或任何其他人。他们可以安装在他/她的设备上。

~ PS : 确保 diawi Url 对附加在您的配置文件中的那些 UDID 有效。而且我还没有尝试过这些步骤来在 TestFlight/AppStore 上上传应用程序。

【讨论】:

我可以验证此方法是否有效 :) 如果有人想要此答案的 shell 脚本,请参阅 gist.github.com/monmonja/6e2910ca51d64b8be8bb8d28d0d34a55 这适用于试飞和应用商店提交吗? 我还没有尝试过,但绝对应该可以。 记住并重新检查我提到的第三步。 效果很好【参考方案3】:

我使用下一个 bash 脚本

flutter build ios --debug
cd ios
xcodebuild -workspace Runner.xcworkspace -scheme Runner archive -archivePath Runner.xcarchive
xcodebuild -exportArchive -archivePath Runner.xcarchive -exportOptionsPlist ../scripts/exportOptions.plist -exportPath ../scripts -allowProvisioningUpdates
rm -fr Runner.xcarchive

ipa 将在 '../scripts' 中创建。你可能有自己的路径。

-allowProvisioningUpdates 如果您希望 xcodebuild 自动更新证书,则使用它。

exportOptions.plist - 这是一个带有分发设置的文件。 我用下一个

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>compileBitcode</key>
    <false/>
    <key>method</key>
    <string>enterprise</string>
    <key>signingStyle</key>
    <string>automatic</string>
    <key>stripSwiftSymbols</key>
    <true/>
    <key>teamID</key>
    <string>YOUR TEAM ID</string>
</dict>
</plist>

【讨论】:

请注意,这实际上会构建您的项目两次:一次使用flutter build ios,一次使用xcodebuild -workspace。两者都使用不同的构建文件夹,因此每个源文件都需要构建两次,浪费大量时间和 CPU 周期。没有人找到更好的解决方案吗? 需要flutter build ios吗?【参考方案4】:

flutter build ipa 现在可用,并采用可选的--export-options-plist 标志从归档包中创建 IPA。详情见主频道flutter build ipa -h

【讨论】:

似乎是一个不错的选择,但它仅在 macOS 中受支持:/ :S 提示:拥有 ExportOptions.plist 的最简单方法是首次从 Runner.xcarchive 手动导出 IPA,这将生成四个文件,其中一个是导出选项。只需将其复制并保存在项目中以与此答案中的命令一起使用【参考方案5】:

我有一个结合了 Makefile 和 Fastlane 的简单实现。这样,我可以从我的项目目录中运行make beta 进行部署。

./Makefile:

.PHONY: beta
beta:
    flutter build ipa --export-options-plist=ExportOptions.plist
    cd ios && fastlane beta ipa:../build/ios/ipa/YourBundleName.ipa

./ios/fastlane/Fastfile:

platform :ios do
    lane :beta do |options|
        # ... pre-delivery actions, eg: `match(type: "appstore")`
        pilot(
            ipa: options[:ipa]
            # ... the rest of your pilot configuration
        )
        # ... post-delivery actions, eg: `slack(message: "Uploaded to TestFlight")`            
    end
end

请注意,我使用的是match(type: "appstore"),所以您将signingStyle 视为manual

./ExportOptions.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>compileBitcode</key>
    <true/>
    <key>method</key>
    <string>app-store</string>
    <key>provisioningProfiles</key>
    <dict>
        <key>your.bundle.identifier</key>
        <string>Your Provisioning Profile Name</string>
    </dict>
    <key>signingCertificate</key>
    <string>iOS Distribution</string>
    <key>signingStyle</key>
    <string>manual</string>
    <key>stripSwiftSymbols</key>
    <true/>
    <key>teamID</key>
    <string>YourTeamId</string>
    <key>thinning</key>
    <string>&lt;none&gt;</string>
</dict>
</plist>

【讨论】:

以上是关于如何使用 Runner.app 创建用于测试的 .ipa 文件?的主要内容,如果未能解决你的问题,请参考以下文章

文件 `Runner.app/Frameworks/Runner.xcworkspace` 没有此位置的当前文件类型

Runner.app/Runner.app/...无限循环Xcode构建失败

文件“WebDriverAgentRunner-Runner.app”无法打开,因为没有这样的文件

flutter Could not find the built application bundle at build/ios/iphoneos/Runner.app.

Flutter:Runner.app/Info.plist 不存在。 Flutter“精简二进制”构建阶段必须在“复制捆绑资源”之后运行

如何创建带有用于测试的图像的工厂