使用命令行编译App

300 阅读2分钟
创建Xcode工程

1、新建Xcode工程,选择App模板,添加图片image.jpg和c函数文件Test.{h,c},在ViewController里实现显示图片逻辑,并添加两个按钮,点击按钮调用c函数并通过Alert显示结果。效果如下图:

image.png

2、在ViewController.m同级目录下,新建compile文件夹

3、选择Xcode菜单栏Product -> Archive,进行打包,导出ipa包。解压这个ipa包,复制embedded.mobileprovisionInfo.plist这两个文件到步骤2创建的compile文件夹内

命令行打包

一、编译文件

打开命令行工具,进入ViewController.m同级目录下,查看文件:

ls -l

输出如下图: image.png

1、首先编译main.m文件,命令如下:

xcrun -sdk iphoneos clang -arch arm64 -mios-version-min=9.0 -fmodules -fobjc-arc -c main.m -o compile/main.o

执行成功,会在compile文件夹下生成main.o文件:

image.png

依次继续编译AppDelegate.mSceneDelegate.mTest.cViewController.m,命令如下:

xcrun -sdk iphoneos clang -arch arm64 -mios-version-min=9.0 -fmodules -fobjc-arc -c AppDelegate.m -o compile/AppDelegate.o
xcrun -sdk iphoneos clang -arch arm64 -mios-version-min=9.0 -fmodules -fobjc-arc -c SceneDelegate.m -o compile/SceneDelegate.o
xcrun -sdk iphoneos clang -arch arm64 -mios-version-min=9.0 -fmodules -fobjc-arc -c Test.c -o compile/Test.o
xcrun -sdk iphoneos clang -arch arm64 -mios-version-min=9.0 -fmodules -fobjc-arc -c ViewController.m -o compile/ViewController.o

生成目标文件如下:

image.png

2、编译storyboard文件 编译storyboard方式与源码文件有所不同,查看Base.lproj里的文件:

image.png

分别编译这两个文件:

ibtool --compilation-directory compile/Base.lproj Base.lproj/Main.storyboard
ibtool --compilation-directory compile/Base.lproj Base.lproj/LaunchScreen.storyboard

编译完成是.storyboardc格式:

image.png

二、链接目标文件 将步骤1生成的目标文件,进行链接:

xcrun -sdk iphoneos clang compile/main.o compile/AppDelegate.o compile/SceneDelegate.o compile/Test.o compile/ViewController.o -arch arm64 -mios-version-min=9.0 -fmodules -fobjc-arc -o compile/BuildApp

删除compile文件夹下的AppDelegate.omain.oSceneDelegate.oTest.oViewController.o文件:

rm -f -r compile/AppDelegate.o
rm -f -r compile/main.o
rm -f -r compile/SceneDelegate.o
rm -f -r compile/Test.o
rm -f -r compile/ViewController.o

四、复制图片资源

App用到了一张图片资源,将图片复制到compile文件夹内:

cp -a image.jpg compile/

五、生成dSYM文件

执行命令:

dsymutil -arch arm64 compile/BuildApp -o compile/BuildApp.app.dSYM

文件结构如下:

image.png

1、制作entitlements文件:

security cms -D -i compile/embedded.mobileprovision > compile/temp.plist
/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' compile/temp.plist > compile/entitlements.plist
rm -f -r compile/temp.plist

2、查看可用证书

security find-identity -v -p codesigning

image.png

3、签名

codesign -fs "Apple Distribution: xxx (xxx)" --entitlements compile/entitlements.plist compile
rm -f -r compile/entitlements.plist

生成签名文件:

image.png

七、打包

1、创建文件:

mkdir -p Payload/BuildApp.app

2、复制compile文件到Payload/BuildApp.app

cp -a compile/ Payload/BuildApp.app

image.png

3、包ipa

zip -r -q -g BuildApp.ipa Payload
rm -f -r Payload

生成BuildApp.ipa文件:

image.png

八、安装ipa

先把测试iPhone手机连接到到Mac电脑

1、安装 ideviceinstaller 工具

brew install ideviceinstaller

测试ideviceinstaller是否安装成功(显示当前所连接设备的udid):

idevice_id --list

打印设备uuid信息:

image.png

2、安装ipa包到真机设备

ideviceinstaller -i BuildApp.ipa

打印安装过程:

image.png

3、打开真机上的BuildApp应用

image.png

image.png

image.png