前言
理论上这是一个很好的想法,但真正落实到实践,简直坑的不要不要的!笔者最终在CentOS上实在搞不动了,只在Ubuntu上弄了,关键CentOS是公司环境也不敢太造次。
整个东西写出来主要是让自己记住坑太多,不是实在想不开没事干,千万不要再搞。
思路来源https://github.com/facebook/xcbuild/issues/37
目的
做这个事情起初只是因为我司不提供Mac机器来做自动打包,但又想要让我做自动打包,能提供的也只有CentOS系统,不过很快就发现打包其实完全不可能,因为证书问题很难解决,然后想着跑跑CI的test也不错才继续研究了一下。。。。毕竟我们Model都是自动生成的,git提交后跑一下CI确保能各端运行正常还是很有用的,另外版本归档打tag的时候跑一下CocoaPods把完整可执行代码构建好拉下来归档也是挺不错的!
现实是恐怕就CocoaPods构建是比较稳定100%没问题,编译这个完全不敢说ok。。。所以有条件的话还是建议用有台Mac专门来干这些事,不然实在太麻烦,哪怕ssh到一台同事电脑悄悄开个账户搞都比在linux上搞靠谱!
如图实现,没mac和有mac简直就是天壤之别的恶心差距!
安装配置
准备工作
ruby (为了支持CocoaPods)
clang 4.0或以上(为了支持IOS10,如果你准备的sdk版本不高,那就无所谓了,关键是对应上)
Apple clang(用他的话妥妥的手动apt-get拯救不了你)
cctools-port 生成ios工具链(ios-toolchain)回头替换掉Xcode里的
ninja
xcbuild
Xcode(确切的说其实只要三个文件夹但我很不放心用了整个)
CocoaPods 安装
这里不得不提CocoaPods兼容性真心不错
CentOS
|
|
Ubuntu
|
|
就是如此简单!已经时可用状态了!
Clang 安装
接下来就不细说CentOS了应为基本上大部分库都是要源码安装。。。
首先clang --version
看看版本是不是自己想要,多半都不是然后直接删了
|
|
然后搞一下软件源/etc/apt/sources.list
不然各种依赖包各种找不到让你爽歪歪
|
|
下面大更新一波,安装
|
|
除了错误别找我,直接谷歌去找源
安装完which clang
看看位置如果不是usr/bin
执行下面命令制作软链接,只为保险不是必需的。。。。
|
|
吐槽一波CentOS你更新了源也没用该没有的还是没有建议直接源码安装。
|
|
Apple Clang 安装
步骤如上面CentOS源码安装Clang一样,只是把Clang地址改了下
|
|
cctools-port 制作ios-toolchain
ios sdk 打包
下载完Xcode直接执行下面命令
|
|
制作 iOS armv7 工具链
|
|
制作工具链成功后会提示 all done
将生成的工具链移到 /usr/local/ 目录并更名为 ios-armv7
|
|
将库文件拷贝一份,放进公共库 /usr/lib
|
|
最后将工具链的 bin 目录加入PATH,方便调用
|
|
制作 iOS arm64 工具链
|
|
制作工具链成功后会提示 all done
将生成的工具链 /usr/local/ 目录并更名为 ios-arm64
|
|
使用 rename 命令重命名前缀以与 armv7 区分开来把 arm- 前缀改为 aarch64- 前缀
|
|
将库文件拷贝一份,放进公共库 /usr/lib
|
|
最后将工具链的 bin 目录加入PATH,方便调用
|
|
其实到这基本完活了,单跑.m文件已经没问题了,下面只是为了更加方便的编译项目
合并 armv7 和 arm64 工具链
除了 bin 目录,其他的目录内容貌似都是一样的,把两个 bin 目录合在一起就行了
替换Xcode xctoolchain
最后把bin目录替换下面Xcode的目录,这个步骤为了xcbuild,看过Toolchains
目录的应该会发现里面还有个swift的那个怎么办,没办法。。。不管了我反正没敢试
|
|
Ninja 安装
Ubuntu一行命令解决。。。。
|
|
CentOS天坑模式开启不出意外先升级cmake
源码安装最新版cmake解压执行./bootstrap && make && make install
就ok了,3个命令合一。
然后下载ninja源码
|
|
最后把Path加一下
|
|
xcbuild 安装
|
|
最后把Path加一下和DEVELOPER_DIR
DEVELOPER_DIR就是Xcode的目录,Xcode其实只需要有三个文件夹Xcode.app/Contents/PlugIns
,Xcode.app/Contents/Developer/Toolchains
,Xcode.app/Contents/Developer/Platforms
|
|
使用
完全可以像在Mac下一样用没有任何区别,不过也就CocoaPods完全ok,xcbuild指令和xcodebuild用法完全一样直接用xcodebuild也没问题,只不过能不能编译成功就听天由命吧!坑很深,慎入!