今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

iOS 自动打包

iOS 自动打包#

使用脚本实现自动打包,网上搜了好多,但是偶比较笨,一直发现不知道怎么使用,看了好久,
终于改了个可以使用的,但是最后发现不能用 xcrun 导出;宝宝心里苦,但宝宝不说😂;接着改,最后终于被我捣鼓成功了,分享给大家一下

Note: 只是简单的基础版本的,这个支持的是没有使用 Cocoapods 的工程,,脚本见iOS 自动打包_shell 脚本;如果是使用 Cocoapods 工程的,可以稍微修改一下,鼓励大家自己试试,试好了顺便分享给我,😉

使用方法:

iOS 自动打包 - sh 的使用:下载压缩包后,解压,里面有后缀为.sh 的文件和.plist 的文件,将这两个文件放到
.xcodeproj 所在的文件夹下,然后 ProjectName 和 SchemeName,打开 terminal,运行这个.sh 文件即可。

然后来说一下调试中遇到的问题:

  1. 文件路径的问题
  2. Scheme 的问题,我不知道自己的 sheme 是什么?或者我的 sheme 明明就是这个但是提示我找不到
  3. 脚本运行完,发现所有的文件都变成 Modified 状态,整个人顿时就不好了。。。

问题一:路径的问题#

因为是 shell 脚本,偶会的本来就不多,周五那天智商爆表,居然啃懂了其中几句,然后还知道去找度娘,所以被我改成功了,
这个脚本路径被设置为.xcodeproj 所在的文件夹,
打包的.xcarchive 文件放在这个文件夹下的.build 文件夹下,
导出的 ipa 文件在桌面

问题二:Scheme 的问题#

不知道自己的 Scheme 是什么的,可以去 Product->Scheme->Edit Scheme 下查看
Scheme 查看 1

或者直接运行脚本会打印出来
Scheme 查看 2

写了自己的 Scheme 但是运行脚本后报这个错的
No Schemes img

要注意一下 Edit Scheme 界面的 shared 要勾选
Fixed No Schemes

脚本运行完,所有文件变为 Modified 状态#

使用 git diff 查看了之后,发现是 filemode 的变化

文件 chmod 后其文件某些位发生了变化,如果严格比较原文件和 chmod 后的文件,两者是不一样的,但是源代码通常只关心文本内容,因此 chmod 产生的变化应该忽略

上面的是找度娘之后,找到的博客里介绍的,请原谅,忘记当时怎么搜的了,所有找不到出处,文字是当时截图。。。。。
输入 git config core.filemode false,之后就好了

代码分析#

  • 变量声明

Implement Var
project_path 是获取此脚本文件所在的目录,百度搜出来的Linux - 获取当前正在执行脚本的绝对路径
project_name 是.xcodeproj 前面的文字
scheme_name 是前面说的那个
build_path 是当前路径下 build 文件夹
exportOptionsPlistPath 是 plist 文件的路径
exportFilePath 是导出.ipa 包的路径

  • 打印 scheme、清理工程、编译工程、打包

Run Code

  1. 打印 scheme,如果不知道怎么获取 scheme_name,可以先填上上面的 project_name,注释掉下面所有的代码,运行,就会打印出来当前 project 的 scheme
  2. 清理工程,编译之前先 clean 一下。。。。
  3. 编译工程,编译并生成.xcarchive 文件,放在 build_path 下,名字是 project_name.xcarchive,这一步最为耗时
  4. 打包,将生成的.xcarchive 文件导出.ipa 包到桌面

这里面每一步都可以单独执行,例如想获取 shceme 就注释掉其他几段代码;想测试编译通过没,就只保留清理、编译这段;编译成功,导出失败,就只保留导出这一段,修改测试

  • 判断导出是否成功

Is Export Success
判断桌面是否有 scheme_name.ipa 文件,有的话,就视为打包成功,打开这个文件夹;

后记#

a. 如果是 workspace 工程,可按照这里这个链接,修改清理工程、编译工程、打包这几步

xcodebuild-developer.apple

这就是上面链接里的内容,xcodebuild 的使用都在这里
xcodebuild

b. .plist 文件里的内容可参照这个链接,需要翻墙
xcodebuild's new exportOptionsPlist flag

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.