file + ipa文件名
,可以查看到ipa的类型,我们可以发现是一个zip的压缩包。file命令
查看该文件是Mach-O文件。lipo -info + 文件
查看该文件的架构类型。nm -nm + 文件 | less
查看可执行文件包含的符号。otool -L 文件 | less
查看可执行文件编译的库。otool -tV + 文件 | less
来查看二进制文件中的汇编代码。App的包含关系:
流程: 源代码 -> App -> 安装到手机
Makefile文件下载和entitlements.plist下载
注意:
EDN5ZR66TZ.com.yrd.yrdStore
1.compile:编译源代码,生成目标文件
xcrun -sdk iphoneos clang \
-arch $(Architecture) \
-mios-version-min=7.0 \
-F UIKit \
-fobjc-arc \
-c $(ResourceDirecrory)/AppDelegate.m \
-o $(TmpBuildFile)/AppDelegate.o
2.Link目标文件,生成Mach-O文件
xcrun -sdk iphoneos clang \
$(TmpBuildFile)/main.o $(TmpBuildFile)/AppDelegate.o $(TmpBuildFile)/ViewController.o \
-arch $(Architecture) \
-mios-version-min=7.0 \
-fobjc-arc \
-framework UIKit \
-o $(TmpBuildFile)/$(AppName)
3. ibtool编译storyboard文件
@ibtool \
--compile \
$(TmpBuildFile)/$(ConstIBFile)/Main.storyboardc \
$(ResourceDirecrory)/$(ConstIBFile)/Main.storyboard
4.准备info.plist文件
@defaults write (currentdir)/ ( c u r r e n t d i r ) / (TmpBuildFile)/Info CFBundleIdentifier XXXXXXXXX.com.xxxx.$(AppName)
XXXXXXXXX为TeamID,记得修改
@defaults write \
$(current_dir)/$(TmpBuildFile)/Info \
CFBundleDevelopmentRegion en #国际化时优先使用的语言
@defaults write $(current_dir)/$(TmpBuildFile)/Info CFBundleExecutable $(AppName)
@#Team ID + app identifier
@defaults write $(current_dir)/$(TmpBuildFile)/Info CFBundleIdentifier XXXXXXXXX.com.xxxxx.$(AppName)#XXXXXXXXX为TeamID,记得修改
@defaults write $(current_dir)/$(TmpBuildFile)/Info CFBundleInfoDictionaryVersion 6.0 #plist文件结构的版本
@defaults write $(current_dir)/$(TmpBuildFile)/Info CFBundleName $(AppName)
@defaults write $(current_dir)/$(TmpBuildFile)/Info CFBundlePackageType APPL #APPL: app,FMWK: frameworks,BND: loadable bundles
@defaults write $(current_dir)/$(TmpBuildFile)/Info CFBundleShortVersionString 1.0
@defaults write $(current_dir)/$(TmpBuildFile)/Info CFBundleSignature ???? #指定app创建者
@defaults write $(current_dir)/$(TmpBuildFile)/Info CFBundleVersion 1
@defaults write $(current_dir)/$(TmpBuildFile)/Info LSRequiresIPhoneOS YES
@defaults write $(current_dir)/$(TmpBuildFile)/Info UIMainStoryboardFile Main
@defaults write $(current_dir)/$(TmpBuildFile)/Info UILaunchStoryboardName LaunchScreen
@defaults write $(current_dir)/$(TmpBuildFile)/Info MinimumOSVersion 7.0
@defaults write $(current_dir)/$(TmpBuildFile)/Info DTPlatformName iphoneos
5.复制图片资源
@cp -a $(ResourceDirecrory)/images/. $(TmpBuildFile)/
6、生成dSYM文件
使用dwarfdump --uuid
可以查看dSYM或可执行文件的UUID,匹配成功才能完全将crash log中的16进制地址符号化
@dsymutil \
-arch $(Architecture) \
$(TmpBuildFile)/$(AppName) \
-o $(AppName).app.dSYM
7.签名,准备mobileprovision描述文件
mobileprovision 描述文件包括 Team ID
、Bundle ID
、可用设备列表
,
provision查看命令:security cms -D -i provision_file
此处需要修改
1. embedded 描述文件的名称
2. xx xxx (XXXXXXXX) 证书创建者和ID,钥匙串可以查看
@cp -f embedded.mobileprovision $(TmpBuildFile)
@codesign \
-fs \
'iPhone Developer: xx xxx (XXXXXXXX)' \
--entitlements entitlements.plist \
$(TmpBuildFile)
@#使用codesign -vv xx.app 命令查看App签名信息
8、打包ipa
@mkdir -p Payload
@cp -r -f $(TmpBuildFile) Payload
@zip -r -q $(AppName).ipa Payload
@rm -f -r Payload/
@rm -f -r $(TmpBuildFile)
/*
#0、创建BuildDemo.app文件
#1、Compile Objective-C file
*/
make compile
/*
#2、Link Object file
*/
make link
/*
#3、编译storyboard文件
*/
make storyboard
/*
#4、plist : App ID、name、version ...
*/
make plist
/*
#5、复制图片资源
*/
make asset
/*
#6、生成dSYM文件
*/
make dsym
/*
#7、签名
*/
make codesign
/*
#8、打包ipa
*/
make package
最后通过iTools安装到手机上:
感谢!