目前可以在局域网和 github 访问下载 ipa,可以从日常 build 导出ipa(未加密,应只在公司网使用)
to do
一键打包 build 中的 app,上传ipa本地发布,甚至发消息提示测试 一键 achieve app,上传ipa本地发布,甚至发消息提示测试
踩坑点
10月30日
-
plist 要在 https:// 上面
-
plist 中的链接要准确获取:ipa为下载链接,image同样,bundle-identifier要准确,bundle-version和title可以不准确
-
ipa 下载地址选择:优先选择局域网;github上传大文件使用Git Lfs(不推荐下载慢);七牛下载(未正确获取下载链接,未测试)
-
导出 ipa 方式选择:xcrun + PackageApplication(在日常 build 中导出ipa);脚本打包 achieve,导出出 ipa
xcrun -sdk iphoneos PackageApplication -v ~/xx/xx.app -o ~/xx/xx.ipa
- 在局域网网页发布:使用 xxx.loacl:4000/ 网址;个人借用了博客 jekyll 新建了个发布静态网页
1
2
3
jekyll serve -w --host=0.0.0.0
http://xx.local:4000/test/app
原理和分析
iOS 的 ipa 可以通过链接(ex:itms-services://?action=download-manifest&url=https://xxx/xx.plist)去请求 itunes 安装app(没有静态网页直接请求这个链接,或者生成二维码在相机扫码即可下载 ipa)。
plist 文件格式如下: 有两个对象一个存储 ipa 和图片,另一个对象存储 app identifier 和 版本信息,plist 代码稍后在下边列出。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?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>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>http://xxx/test.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>url</key>
<string>http://xxx/icon57.png</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>url</key>
<string>http://xxx/icon512.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.appid</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>XXName</string>
</dict>
</dict>
</array>
</dict>
</plist>
过程
github 发布ipa
主要是借助 有 ssh 证书的 github 网站来存储 manifest.plsit 文件
可能遇到以下问题
-
plist 文件: ipa 是否是下载地址;bundle identifier 是否正确
-
plist 文件是否能正常访问
-
ipa 是否对应 bundle identifier
-
如果在 静态 blog 中,不要使用 xx.io/xx.ipa;itunes 有可能拿不到
-
还是不行,新建 repo 去存储 manifest.plsit
参考资料
利用Github 实现iOS 测试包的在线分发: Github 存储 plist + Flask 搭建静态网页
github 上传ipa
如果你要用 github 存储 ipa 文件,那么这真的不明智 操蛋,不使用Github存储 ipa 跳过本章…
1. 不建议使用 github 存储 ipa ,访问速度很慢
2. 关于 github 单个文件超过100M
添加 git LFs : 关于Github的上传文件超限问题解决
后悔了,移除 git LFs :
a. 删除 .gitattributes, 添加忽略*.ipa,删除 app.ipa, push
b. 如果 push 不成功,可能是本地有多个 commint ,其中有 app.ipa 的修改,不需要后退合并 commint 即可,需要先 push 那些分支在删除
打包 ipa 的 N 种方式
博客资料很多,其实究其原理两种
-
achieve 然后导出 ipa
-
将 build 的.app 转换为 ipa
抛却 zip,手动打包等方式。如果完整打包就使用 xcodebuild -exportArchive,这也是 Xcode8 之后御用的方式;如果只是需要将 .app 导出为 .ipa 可以使用 Xrun
Xcrun
使用Xrun将 build 直接转换为 ipa,因为打包快,直接把平时运行的 build 导出 ipa 了
Xcode 8 以上即不包含 PackageApplication 包,添加方法,注意 sudo
因为是在 XCode 包中添加的,如果升级 Xcode 可能失效,重新安装一下即可
1
2
3
4
5
6
7
8
9
10
11
12
# 下载
链接如上
添加PackageApplication
# 放到指定目录
sudo cp ./PackageApplication /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
# 终端执行下面两条命令
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/
sudo chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication
iOS自动构建以及打包命令(xcodebuild,xcrun)
Jenkins集成iOS自动化打包(GitLab + xcodebuild + xcrun + ftp)
打包命令
1
xcrun -sdk iphoneos PackageApplication -v ~/xx/xx.app -o ~/xx/xx.ipa
mainfest 生成
在原理分析一章已经介绍过了
重申一下,.plist 中所有的链接都要是直接指向文件的链接
ipa 下载
只需要在手机 safari 中 访问如下链接即可
1
itms-services://?action=download-manifest&url=https://xxx/xx.plist
1. 直接生成二维码,相机扫码访问
2. 在静态网页中添加 a 链接访问
jekyll 静态博客发布到局域网
上代码
1
2
3
4
5
6
// 发布
jekyll serve -w --host=0.0.0.0
// 端口占用
ps -ax|grep -i "jekyll"|grep -v grep|awk '{print "kill -9 " $1}'|sh
另外
在 mac 中设置电脑的 name.local 即可使用 name.local:端口//xxx 访问,这样就不用去查IP了
1
2
3
4
5
偏好设置 -> 共享 -> ”电脑名下边的 local 地址”
ex:
http:shown.local:4000/test
jekyll 静态博客 的其他使用
屏蔽某些页面
我在 nav 的 遍历博客中添加了博客 title 的判断,如果是 ‘test’ 就不会出现在博客目录中
1
if page.title != 'test'
现在我有两个页面,一个测试 scheme 码的测试页面,一个是 ipa 的下载页面
静态 json 文件
注意一下访问地址
1
https://raw.githubusercontent.com/poos/poos.github.io/master/test/xx.json
别忘了在博客中屏蔽 .ipa
ps:全局git 忽略文件
第一步要找到一个 .gitignore_global 的配置文件,在~/ 目录下使用ls -all就能找这个文件,然后vi .gitignore_global打开它,把下面的代码添加进去,然后wq退项目.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
#
# Pods/
结语
正常配置即可访问安装了。测试设备的100个设备现在装起来就很方便了。
过程算是走通了,现在算是半自动化吧,后续再看看脚本完善优化一下。