[Flutter]打包IPA

1.直接使用Xcode运行iOS工程

不用flutter构建,在Xcode中是可以独立进行构建运行和打包发布的。

1).运行项目

先将flutter的build清理

bash 复制代码
$ flutter clean
$ flutter pub get

然后立即用XCode打开iOS工程运行

运行会报错:

bash 复制代码
error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. 

提示你需要先打开终端,cd到iOS工程目录执行pod install,然后再运行项目。

bash 复制代码
$ pod install

到这里,项目就已经正常运行到手机。

2).查看构建内容

Commond + Shift + G 进入~/Library/Developer/Xcode/DerivedData目录,查看构建内容。

我们会在Debug-iphoneos中看到一个Runner.app,这个Runner.app 是一个iOS应用程序包。它是一个可执行的应用程序目录,包含了所有的资源和编译后的代码,用于在 iOS 设备或模拟器上运行。

右键选择"显示包内容",我们会看到一个名为"Runner"的Mach-O文件。Mach-O (Mach Object) 文件格式是 macOS 和 iOS 操作系统用于可执行文件、目标代码、共享库和核心转储的文件格式。

另外,还可看到所有的资源和依赖的框架。

3).打包

在Xcode,进入Product -> Scheme -> Edit Scheme

左边选择"Archive",右侧设置"Build Configuration"控制打包出来的IPA是什么环境。

然后,到Product选择Archive以构建和归档应用。

归档完成后,在 Organizer 中选择您的归档。

点击 Distribute App

选择分发方法,例如 Ad HocApp Store,根据您打包的目的。

按照提示操作,选择签名证书和配置文件。

选择一个位置保存导出的 IPA 文件。

2.使用flutter构建能在模拟器运行的包

为了在模拟器上安装应用程序,你需要构建一个专门为 iOS 模拟器架构(如 x86_64 或 arm64 )编译的版本。

bash 复制代码
$ flutter build ios --simulator

将Runner.app拖入iPhone模拟器就可以运行。缺少真机时,就可以用这种方式打包,让测试人员安装模拟器来测试。

3.使用flutter构建能在iPhone真机运行的包

1).构建Runner.app

使用flutter build ios命令,默认会构建一个release环境的Runner.app程序包。

bash 复制代码
// 构建一个release环境的包
$ flutter build ios

bash 复制代码
// 构建一个release环境的包
$ flutter build ios --release

构建一个debug环境的包:

bash 复制代码
$ flutter build ios --debug

因为还没签名,所以是无法直接安装到真机上,又因为架构不同也无法安装到模拟器上。

如果你再用Xcode打开iOS项目运行项目到真机,会发现Xcode会重新构建一个Runner.app来进行安装。

那么有人就会问了,既然安装不了,那么用flutter build ios构建的Runner.app有什么用呢,还不如到Xcode直接打包生成ipa文件来进行分发。是的,可以这样理解,对初学者来说用Xcode打包是最简单的。

实际上,我们拿到Runner.app后,还可以使用命令行或第三方工具将其签名打包成IPA。

2).基于命令行手动创建.ipa文件

如果您希望在不使用 Xcode 的情况下将 Flutter 构建的Runner.app转换为.ipa格式,可以使用命令行工具。

a.终端cd到Runner.app所在目录

bash 复制代码
$ cd /Users/gamin/Desktop/fd

b.创建 Payload 目录

在您的 Runner.app 所在的目录中,创建一个名为 Payload 的文件夹。

bash 复制代码
$ mkdir Payload

c.将 Runner.app 移动到 Payload 目录

将 Runner.app 文件夹移动到 Payload 文件夹中。

bash 复制代码
$ mv Runner.app Payload/

d.压缩 Payload 目录

将 Payload 文件夹压缩为 .ipa 文件。确保您的当前工作目录包含 Payload 文件夹。

bash 复制代码
$ zip -r Runner.ipa Payload/

这样,您就会得到一个名为 Runner.ipa的文件。然而,这个.ipa文件仍需要一个有效的签名才能安装到 iOS 设备上。通常,您需要使用苹果的开发者证书和配置文件来签名应用程序,而这通常通过 Xcode 或其他代码签名工具完成。

3).使用第三方工具对.ipa进行签名

除了使用 Xcode 进行签名之外,还有第三方工具可以用来为 iOS 应用程序(包括 Flutter 构建的

Runner.app)签名。这些工具通常被开发者使用在没有苹果开发者账号的情况下进行测试,或者进行越狱设备上的安装。然而,这些方法通常不被苹果官方支持,而且可能违反苹果的服务条款,因此在商业和生产环境中使用时需要谨慎。

以下是一些第三方签名工具的例子:

爱思助手

  • 去工具箱中选择"IPA签名"。

Cydia Impactor

  • Cydia Impactor 是一个流行的应用程序,可以将 IPA 文件安装到 iOS 设备上。它要求用户提供一个有效的 Apple ID 来签署应用程序,即使没有官方开发者账号也可以使用。

App Signer

  • 这是一个 macOS 应用程序,可以用来对 iOS 应用程序进行签名。它同样需要一个有效的 Apple ID 和对应的证书来进行签名。

iOS App Signer

  • 这是一个开源的工具,通过图形用户界面提供了应用程序签名的功能。它可以与 Xcode 生成的证书和配置文件一起使用。

AltDeploy

  • 类似于 Cydia Impactor,AltDeploy 允许用户在 Mac 上签署并安装 IPA 文件到 iOS 设备。

AltStore

  • AltStore 是另一种方法,它允许用户通过一个特殊的应用商店安装非 App Store 应用。它使用用户的 Apple ID 来签署应用程序,以便它们可以安装在未越狱的 iOS 设备上。

4).使用命令行工具 codesign 进行签名

如果您有苹果的开发者证书,您可以使用 codesign 命令行工具来手动签名 Runner.app,然后再打包为 .ipa。以下是 codesign 的基本用法:

bash 复制代码
$ codesign -s "YourCertificateName" -f --entitlements YourEntitlements.entitlements Runner.app

在这里,"YourCertificateName"是您的开发者证书名称,"YourEntitlements.entitlements"是您的应用特权配置文件。您可以在 Keychain Access 应用中找到您的证书名称。

请注意,手动签名和打包应用程序可能会遇到许多问题,特别是在证书和配置文件管理方面。Xcode 提供了自动化的签名和打包流程,因此如果可能,建议使用 Xcode 来管理这些步骤。

由于这些方法绕过了苹果的正式工具和程序,所以不建议用于生产环境或分发。对于正式的发布,您应该使用 Xcode 或 Apple 提供的其他官方工具来确保您的应用符合苹果的安全和分发要求。

相关推荐
早起的年轻人3 小时前
Flutter String 按 ,。分割
flutter
missmisslulu7 小时前
电容笔值得买吗?2024精选盘点推荐五大惊艳平替电容笔!
学习·ios·电脑·平板
GEEKVIP8 小时前
手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]
android·macos·ios·智能手机·电脑·手机·iphone
GEEKVIP8 小时前
如何在 Windows 10 上恢复未保存/删除的 Word 文档
macos·ios·智能手机·电脑·word·笔记本电脑·iphone
奇客软件9 小时前
iPhone使用技巧:如何恢复变砖的 iPhone 或 iPad
数码相机·macos·ios·电脑·笔记本电脑·iphone·ipad
helloxmg12 小时前
鸿蒙harmonyos next flutter通信之MethodChannel获取设备信息
flutter
helloxmg13 小时前
鸿蒙harmonyos next flutter混合开发之开发package
flutter·华为·harmonyos
奇客软件1 天前
如何从相机的记忆棒(存储卡)中恢复丢失照片
深度学习·数码相机·ios·智能手机·电脑·笔记本电脑·iphone
GEEKVIP2 天前
如何修复变砖的手机并恢复丢失的数据
macos·ios·智能手机·word·手机·笔记本电脑·iphone
lqj_本人2 天前
flutter_鸿蒙next_Dart基础②List
flutter