欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Xcode编译App(三): 编译整个项目的最终Target

程序员文章站 2024-03-15 14:54:00
...

编译最终的 Target

Build target MyAppName of project MyAppName with configuration Debug

注意:
编译的顺序总体上是遵守着 Build Phases中的顺序的

Xcode编译App(三): 编译整个项目的最终Target

这部分相比较编译单个Target就是多了一些步骤:
1、一些自定义的脚本执行
2、在链接生成可执行文件之后,还会进行资源的处理,拷贝
3、签名步骤

一、准备工作

创建 .app 文件夹

路径为: Build/Products/Debug-iphonesimulator/MyAppName.app;就是最终的生成的app文件夹

// 生成 .app 文件夹
MkDir /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    /bin/mkdir -p /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app

路径格式为 Build/Products/{配置}-{平台}/{项目名称}.app

处理 Entitlements

// 写入相关文件到 DerivedSources (Entitlements.plist、Entitlements-Simulated.plist)
WriteAuxiliaryFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/DerivedSources/Entitlements.plist (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    write-file /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/DerivedSources/Entitlements.plist

WriteAuxiliaryFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/DerivedSources/Entitlements-Simulated.plist (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    write-file /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/DerivedSources/Entitlements-Simulated.plist

// 处理产品打包,生成 Entitlements 
ProcessProductPackaging "" /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName.app.xcent (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    

Entitlements:

{
    "com.apple.security.get-task-allow" = 1;
}


    builtin-productPackagingUtility -entitlements -format xml -o /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName.app.xcent

ProcessProductPackaging "" /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName.app-Simulated.xcent (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    

Entitlements:

{
    "application-identifier" = "111111111";
    "aps-environment" = development;
}


    builtin-productPackagingUtility -entitlements -format xml -o /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName.app-Simulated.xcent
  • DerivedSources路径为 /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/DerivedSources

DerivedSources文件夹内容如下:

.
├── Entitlements-Simulated.plist
├── Entitlements.plist
└── Pods-MyAppName-checkManifestLockResult.txt

Entitlements-Simulated.plist内容如下:

  • application-identifier: Bundle Id
  • aps-environment: 推送 aps
<?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>application-identifier</key>
	<string>1111111</string>
	<key>aps-environment</key>
	<string>development</string>
</dict>
</plist>

Entitlements.plist 内容如下:

<?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>com.apple.security.get-task-allow</key>
	<true/>
</dict>
</plist>

Pods-MyAppName-checkManifestLockResult.txtpod 检查 Podfile 文件内容

SUCCESS

这个就是动态调试的一些权限

二、WriteAuxiliaryFile (写入辅助文件)

和上面????的单个Target相同

// 写入辅助文件
WriteAuxiliaryFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/all-product-headers.yaml (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    write-file /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/all-product-headers.yaml

WriteAuxiliaryFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName.hmap (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    write-file /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName.hmap

WriteAuxiliaryFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-project-headers.hmap (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    write-file /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-project-headers.hmap

WriteAuxiliaryFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-own-target-headers.hmap (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    write-file /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-own-target-headers.hmap

WriteAuxiliaryFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-generated-files.hmap (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    write-file /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-generated-files.hmap

WriteAuxiliaryFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-all-target-headers.hmap (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    write-file /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-all-target-headers.hmap

WriteAuxiliaryFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-all-non-framework-target-headers.hmap (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    write-file /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-all-non-framework-target-headers.hmap
    
// 写入辅助文件 .LinkFileList
WriteAuxiliaryFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Objects-normal/x86_64/MyAppName.LinkFileList (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    write-file /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Objects-normal/x86_64/MyAppName.LinkFileList

三、脚本文件 Check Pods Manifest.lock

看下XcodeBuild Phases内容如下:

Xcode编译App(三): 编译整个项目的最终Target

这个步骤对应的是上面的脚本文件

// 自定义脚本文件 (这个是 pod 的 Check Pods Manifest.lock)
WriteAuxiliaryFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Script-DF83CB016ED7E296FB2BFB2E.sh (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    write-file /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Script-DF83CB016ED7E296FB2BFB2E.sh
// 执行脚本
PhaseScriptExecution [CP]\ Check\ Pods\ Manifest.lock /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Script-DF83CB016ED7E296FB2BFB2E.sh (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    /bin/sh -c /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Script-DF83CB016ED7E296FB2BFB2E.sh

Script-DF83CB016ED7E296FB2BFB2E.sh 内容打开如下:

#!/bin/sh
diff "${PODS_PODFILE_DIR_PATH}/Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null
if [ $? != 0 ] ; then
    # print error to STDERR
    echo "error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation." >&2
    exit 1
fi
# This output is used by Xcode 'outputs' to avoid re-running this script phase.
echo "SUCCESS" > "${SCRIPT_OUTPUT_FILE_0}"

这个就是对比podfile文件,最终结果输出到 /Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/DerivedSources/Pods-MyAppName-checkManifestLockResult.txt 文件中

Xcode编译App(三): 编译整个项目的最终Target

四、CompileC (编译源文件)

.m 文件经过编译成为 .o 文件

看下XcodeBuild Phases内容如下:

Xcode编译App(三): 编译整个项目的最终Target

// 编译源文件 
CompileC /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Objects-normal/x86_64/MJRefreshBackStateFooter.o /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/MJ/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    export LANG=en_US.US-ASCII
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -arch x86_64 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -std=gnu99 -fobjc-arc -fmodules -gmodules -fmodules-cache-path=/Users/ocean/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -fmodules-prune-interval=86400 -fmodules-prune-after=345600 -fbuild-session-file=/Users/ocean/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/Session.modulevalidation -fmodules-validate-once-per-build-session -Wnon-modular-include-in-framework-module -Werror=non-modular-include-in-framework-module -Wno-trigraphs -fpascal-strings -O0 -fno-common -Wno-missing-field-initializers -Wno-missing-prototypes -Werror=return-type -Wunreachable-code -Wno-implicit-atomic-properties -Werror=deprecated-objc-isa-usage -Wno-objc-interface-ivars -Werror=objc-root-class -Wno-arc-repeated-use-of-weak -Wduplicate-method-match -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wconditional-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wno-non-literal-null-conversion -Wno-objc-literal-conversion -Wshorten-64-to-32 -Wpointer-sign -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wundeclared-selector -Wno-deprecated-implementations -DDEBUG=1 -DCOCOAPODS=1 -DOBJC_OLD_DISPATCH_PROTOTYPES=0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk -fasm-blocks -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -mios-simulator-version-min=7.0 -g -Wno-sign-conversion -Wno-infinite-recursion -Wno-comma -Wno-block-capture-autoreleasing -Wno-strict-prototypes -Wno-semicolon-before-method-body -fobjc-abi-version=2 -fobjc-legacy-dispatch -index-store-path /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Index/DataStore -iquote /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-generated-files.hmap -I/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-own-target-headers.hmap -I/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-all-target-headers.hmap -iquote /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName-project-headers.hmap -I/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/include -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/AFNetworking -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/BlocksKit -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/HYAlert -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/HYDeviceKit -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/HYHudManager -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/HYPageRouteManager -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/HYTextInput -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/HYWebView -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/LBXScan -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/MBProgressHUD -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/MGSwipeTableCell -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/MHAnimationKit -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/MHAppConfiguration -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/MHBaseClass -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/MHConfigUtil -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/MHFoundationKit -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/MHHudManager -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/MHNetworkManager -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/MHReachability -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/MHUIKit -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/MHUserInfo -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/Masonry -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/NJKWebViewProgress -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/RegexKitLite -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/SDCycleScrollView -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/SDWebImage -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/SVProgressHUD -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/TZImagePickerController -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/Valet -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/WZLBadge -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/YYModel -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/ZipArchive -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/pop -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/AFNetworking -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/AMap3DMap -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/AMapFoundation -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/AMapSearch -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/Masonry -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/RegexKitLite -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/SimpleKeychain -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/SystemServices -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/Headers/Public/ZipArchive -I/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/IndexVC/HotServices/Others -I/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/DerivedSources/x86_64 -I/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/DerivedSources -F/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AMap3DMap -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AMapFoundation -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AMapSearch -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Frameworks -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/ShareSDK -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/ShareSDK/Support/Optional -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/ShareSDK/Support/PlatformSDK/QQSDK -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/ShareSDK/Support/Required -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/AlipaySDK -include /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/MyAppName.pch -MMD -MT dependencies -MF /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Objects-normal/x86_64/MJRefreshBackStateFooter.d --serialize-diagnostics /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Objects-normal/x86_64/MJRefreshBackStateFooter.dia -c /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/MJ/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m -o /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Objects-normal/x86_64/MJRefreshBackStateFooter.o

编译过程中会有一些警告信息

// 编译过程中产生的警告信息
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/CustomUI/WPAttributedMarkup/WPAttributedMarkup/NSString+WPAttributedMarkup.m:124:9: warning: address of function 'link' will always evaluate to 'true' [-Wpointer-bool-conversion]
    if (link)
    ~~  ^~~~
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/CustomUI/WPAttributedMarkup/WPAttributedMarkup/NSString+WPAttributedMarkup.m:124:9: note: prefix with the address-of operator to silence this warning
    if (link)
        ^
        &
1 warning generated.

五、Ld 库(静态库.a、动态库framework)处理(链接到.app下的可执行文件中)

看下XcodeBuild Phases内容如下:

Xcode编译App(三): 编译整个项目的最终Target

Pod 管理的第三方库最终生成的是 .a 静态库;

这个步骤Ld就是把所有的

  • 静态库: (包含Pod中的和主项目中的静态库)
    • .a
    • .framework
  • 动态库:
    • .framework

合并到.app下的可执行文件中

Xcode编译App(三): 编译整个项目的最终Target


  • -L: .a
  • -F: framework
// 静态库依赖
Ld /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/MyAppName normal x86_64 (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    export IPHONEOS_DEPLOYMENT_TARGET=7.0
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 
    -arch x86_64 
    -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/AFNetworking 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/BlocksKit 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/HYAlert 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/HYDeviceKit 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/HYHudManager 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/HYPageRouteManager 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/HYTextInput 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/HYWebView 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/LBXScan 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MBProgressHUD 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MGSwipeTableCell 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHAnimationKit 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHAppConfiguration 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHBaseClass 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHConfigUtil 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHFoundationKit 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHHudManager 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHNetworkManager 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHReachability 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHUIKit 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHUserInfo 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/Masonry 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/NJKWebViewProgress 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/RegexKitLite 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/SDCycleScrollView 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/SDWebImage 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/SVProgressHUD 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/TZImagePickerController 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/Valet 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/WZLBadge 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/YYModel 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/ZipArchive 
    -L/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/pop 
    -L/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Frameworks 
    -L/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/JpushLib 
    -L/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/UMAnalytics_Sdk_3.6.6 
    -L/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/ShareSDK/Support/PlatformSDK/SinaWeiboSDK 
    -L/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/ShareSDK/Support/PlatformSDK/WeChatSDK 
    -L/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/IndexVC/HotServices/Others 
    -L/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/Lame 
    -F/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator 
    -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AMap3DMap 
    -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AMapFoundation 
    -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AMapSearch 
    -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Frameworks 
    -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/ShareSDK 
    -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/ShareSDK/Support/Optional 
    -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/ShareSDK/Support/PlatformSDK/QQSDK 
    -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/ShareSDK/Support/Required 
    -F/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/AlipaySDK 
    -filelist /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Objects-normal/x86_64/MyAppName.LinkFileList 
    -Xlinker 
    -rpath 
    -Xlinker 
    @executable_path/Frameworks 
    -mios-simulator-version-min=7.0 
    -dead_strip 
    -Xlinker 
    -object_path_lto 
    -Xlinker /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Objects-normal/x86_64/MyAppName_lto.o 
    -Xlinker 
    -export_dynamic 
    -Xlinker 
    -no_deduplicate 
    -Xlinker 
    -objc_abi_version 
    -Xlinker 2 
    -fobjc-arc 
    -fobjc-link-runtime 
    -ObjC 
    -lAFNetworking 
    -lBlocksKit 
    -lHYAlert 
    -lHYDeviceKit 
    -lHYHudManager 
    -lHYPageRouteManager 
    -lHYTextInput 
    -lHYWebView 
    -lLBXScan 
    -lMBProgressHUD 
    -lMGSwipeTableCell 
    -lMHAnimationKit 
    -lMHAppConfiguration 
    -lMHBaseClass 
    -lMHConfigUtil 
    -lMHFoundationKit 
    -lMHHudManager 
    -lMHNetworkManager 
    -lMHReachability 
    -lMHUIKit 
    -lMHUserInfo 
    -lMasonry 
    -lNJKWebViewProgress 
    -lRegexKitLite 
    -lSDCycleScrollView 
    -lSDWebImage 
    -lSVProgressHUD 
    -lTZImagePickerController 
    -lValet 
    -lWZLBadge 
    -lYYModel 
    -lZipArchive 
    -lc++ 
    -licucore 
    -lpop 
    -lz 
    -framework AMapFoundationKit 
    -framework AMapSearchKit 
    -framework AVFoundation 
    -framework AssetsLibrary 
    -framework CoreFoundation 
    -framework CoreGraphics 
    -framework CoreLocation 
    -framework CoreTelephony 
    -framework CoreText 
    -framework Foundation 
    -framework GLKit 
    -framework ImageIO 
    -framework MAMapKit 
    -framework MessageUI 
    -framework MobileCoreServices 
    -framework OpenGLES 
    -framework Photos 
    -framework QuartzCore 
    -framework Security 
    -framework SystemConfiguration 
    -framework UIKit 
    -framework WebKit 
    -Xlinker 
    -sectcreate 
    -Xlinker 
    __TEXT 
    -Xlinker 
    __entitlements 
    -Xlinker /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName.app-Simulated.xcent 
    -lz 
    -lsqlite3.0 
    -lz.1.2.5 
    -lxml2 
    -framework WebKit 
    -framework AlipaySDK 
    -framework CoreMotion 
    -framework CFNetwork 
    -framework Foundation 
    -framework UIKit 
    -framework CoreGraphics 
    -framework CoreText 
    -framework QuartzCore 
    -framework CoreTelephony 
    -lc++ 
    -lresolv 
    -framework AddressBookUI 
    -framework AddressBook 
    -framework MessageUI 
    -framework ImageIO 
    -framework JavaScriptCore 
    -lstdc++ 
    -licucore 
    -lxml2 
    -lz.1.2.5 
    -framework ShareSDKUI 
    -framework ShareSDK 
    -framework TencentOpenAPI 
    -lsqlite3.0 
    -lz /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/JpushLib/jpush-ios-2.1.6.a
    -lWeChatSDK 
    -lcrypto 
    -framework MOBFoundation 
    -lMobClickLibrary 
    -framework MobileCoreServices 
    -lssl 
    -framework SystemConfiguration 
    -framework Security 
    -framework MapKit 
    -framework CoreLocation 
    -framework AudioToolbox 
    -framework ShareSDKExtension 
    -framework ShareSDKConnector 
    -framework MediaPlayer 
    -framework CoreFoundation 
    -lsqlite3 
    -lWeiboSDK 
    -framework AssetsLibrary 
    -framework AVFoundation 
    -lPods-MyAppName 
    -Xlinker 
    -dependency_info 
    -Xlinker /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Objects-normal/x86_64/MyAppName_dependency_info.dat 
    -o /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/MyAppName

存放的所以来的库的信息

补充:
1、Pods 项目管理所有的第三方库
2、每一个第三方库都有一个Target,每一个Target最终生成静态库.a
3、Pods 项目有一个特殊的 Target (Pods-MyAppName), 最终生成一个静态库 libPods-MyAppName.a,这个Target依赖Pods项目中的其他Target,所以libPods-MyAppName.a也会依赖其他Target生成的静态库
4、Pods 项目特殊的 Target (Pods-MyAppName) 生成的静态库 libPods-MyAppName.a会被放到主项目,主项目依赖这个静态库

Xcode编译App(三): 编译整个项目的最终Target

Xcode编译App(三): 编译整个项目的最终Target

六、拷贝/处理资源文件

把相关的资源文件处理之后放到.app文件夹下面

看下XcodeBuild Phases内容如下:

Xcode编译App(三): 编译整个项目的最终Target

CompileStoryboard 编译 .storyboard.storyboardc 文件

  • 使用的工具: /Applications/Xcode.app/Contents/Developer/usr/bin/ibtool

注:这一步CompileStoryboard只是把 .storyboard 编译为 .storyboardc 文件,还需要经过下面的 LinkStoryboards 操作才会把 .storyboardc 移动到 .app 文件夹下面

MHChildRearingHome.storyboard 文件生成 MHChildRearingHome.storyboardc 文件

Xcode编译App(三): 编译整个项目的最终Target

// 编译 .Storyboard 文件为 .storyboardc 文件
CompileStoryboard /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/IndexVC/Home/MHChildRearingHome.storyboard (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    export XCODE_DEVELOPER_USR_PATH=/Applications/Xcode.app/Contents/Developer/usr/bin/..
    /Applications/Xcode.app/Contents/Developer/usr/bin/ibtool 
    --errors 
    --warnings 
    --notices 
    --module MyAppName 
    --output-partial-info-plist /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MHChildRearingHome-SBPartialInfo.plist 
    --auto-activate-custom-fonts 
    --target-device iphone 
    --target-device ipad 
    --minimum-deployment-target 7.0 
    --output-format human-readable-text 
    --compilation-directory /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/IndexVC/Home/MHChildRearingHome.storyboard

对应的目录文件如下:

$ cd /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build 
$ tree
.
├── Base.lproj
│   ├── LaunchScreen-SBPartialInfo.plist
│   ├── LaunchScreen.storyboardc
│   │   ├── 01J-lp-oVM-view-Ze5-6b-2t3.nib
│   │   ├── Info.plist
│   │   ├── StringsFiles.plist
│   │   └── UIViewController-01J-lp-oVM.nib
│   ├── Main-SBPartialInfo.plist
│   ├── Main.storyboardc
│   │   ├── BYZ-38-t0r-view-8bC-Xf-vdC~ipad.nib
│   │   │   ├── objects-8.0+.nib
│   │   │   └── runtime.nib
│   │   ├── BYZ-38-t0r-view-8bC-Xf-vdC~iphone.nib
│   │   │   ├── objects-8.0+.nib
│   │   │   └── runtime.nib
│   │   ├── StringsFiles.plist
│   │   ├── UIViewController-BYZ-38-t0r~ipad.nib
│   │   │   ├── objects-8.0+.nib
│   │   │   └── runtime.nib
│   │   └── UIViewController-BYZ-38-t0r~iphone.nib
│   │       ├── objects-8.0+.nib
│   │       └── runtime.nib
│   ├── Main~ipad.storyboardc
│   │   ├── Info-8.0+.plist
│   │   └── Info.plist
│   └── Main~iphone.storyboardc
│       ├── Info-8.0+.plist
│       └── Info.plist
├── MyAppName.app-Simulated.xcent
├── MyAppName.app.xcent
├── MHChildRearingHome-SBPartialInfo.plist
├── MHChildRearingHome.storyboardc
│   ├── 6Hp-rT-Utw-view-kJC-jE-2BB~ipad.nib
│   │   ├── objects-8.0+.nib
│   │   └── runtime.nib
│   ├── 6Hp-rT-Utw-view-kJC-jE-2BB~iphone.nib
│   │   ├── objects-8.0+.nib
│   │   └── runtime.nib
│   ├── Lcz-kB-qdq-view-oge-hV-Jzc~ipad.nib
│   │   ├── objects-8.0+.nib
│   │   └── runtime.nib
│   ├── Lcz-kB-qdq-view-oge-hV-Jzc~iphone.nib
│   │   ├── objects-8.0+.nib
│   │   └── runtime.nib
│   ├── MHChildRearingHomeHeaderVC~ipad.nib
│   │   ├── objects-8.0+.nib
│   │   └── runtime.nib
│   ├── MHChildRearingHomeHeaderVC~iphone.nib
│   │   ├── objects-8.0+.nib
│   │   └── runtime.nib
│   ├── MHVIPMoreViewController~ipad.nib
│   │   ├── objects-8.0+.nib
│   │   └── runtime.nib
│   └── MHVIPMoreViewController~iphone.nib
│       ├── objects-8.0+.nib
│       └── runtime.nib
├── MHChildRearingHome~ipad.storyboardc
│   ├── Info-8.0+.plist
│   └── Info.plist
├── MHChildRearingHome~iphone.storyboardc
│   ├── Info-8.0+.plist
│   └── Info.plist

CpResource (其他的资源文件)

命令是 builtin-copy

  • .caf
  • .json
  • .db
  • .bundle
  • .txt
  • .jpg

Xcode编译App(三): 编译整个项目的最终Target

// 拷贝资源文件到 .app 文件夹下面 (sound.caf、MineConfigClass.json、Database.db、ShareSDK.bundle、read_me.txt、Launch2.jpg)
CpResource /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/sound.caf /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/sound.caf (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    builtin-copy 
    -exclude .DS_Store 
    -exclude CVS 
    -exclude .svn 
    -exclude .git 
    -exclude .hg 
    -resolve-src-symlinks 
    /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/sound.caf 
    /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app

CopyPlistFile 处理自定义的 plist 文件

命令是 builtin-copyPlist

不是info.plist文件,是自定义的plist文件;

// 拷贝plist文件到 .app 文件夹下面
CopyPlistFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/MyConfig.plist /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/IndexVC/Home/HaiZiGuoPlist/MyConfig.plist (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    builtin-copyPlist 
    --convert binary1 
    --outdir /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app 
    -- /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/IndexVC/Home/HaiZiGuoPlist/MyConfig.plist

CopyPNGFile 拷贝png图片文件

命令是 /Applications/Xcode.app/Contents/Developer/usr/bin/copypng

注意是直接放在项目文件夹中的图片文件,不是 .xcassets 中的图片

Xcode编译App(三): 编译整个项目的最终Target

// 拷贝 png 图片到 .app 文件夹下面
CopyPNGFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/首页选中aaa@qq.com /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/MyImages/tabbarImg/首页选中aaa@qq.com (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
    export SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk
    export TOOLCHAINS=
    /Applications/Xcode.app/Contents/Developer/usr/bin/copypng 
    -compress 
    -strip-PNG-text 
    /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/MyImages/tabbarImg/首页选中aaa@qq.com 
    /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/首页选中aaa@qq.com

CompileAssetCatalog (编译 .xcassets 文件 为 Assets.car)

命令是 /Applications/Xcode.app/Contents/Developer/usr/bin/actool

.xcassets 文件进行处理 ,生成 .car 文件,同时会对 AppIconLaunchImage 进行处理,同时会对文件名称重新格式化命名

// 编译 .xcassets 文件 为 Assets.car
CompileAssetCatalog /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/CustomUI/CTAssetsPickerController/Images.xcassets /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Images.xcassets /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/MJ/Images.xcassets (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    /Applications/Xcode.app/Contents/Developer/usr/bin/actool 
    --output-format human-readable-text 
    --notices 
    --warnings 
    --export-dependency-info /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/assetcatalog_dependencies 
    --output-partial-info-plist /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/assetcatalog_generated_info.plist 
    --app-icon AppIcon 
    --launch-image LaunchImage 
    --compress-pngs 
    --enable-on-demand-resources YES 
    --filter-for-device-model iPhone11,2 
    --filter-for-device-os-version 12.1 
    --sticker-pack-identifier-prefix com.mywayinfo.yuerzhushou.sticker-pack. 
    --target-device iphone 
    --target-device ipad 
    --minimum-deployment-target 7.0 
    --platform iphonesimulator 
    --product-type com.apple.product-type.application 
    --compile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/CustomUI/CTAssetsPickerController/Images.xcassets /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Images.xcassets /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Library/MJ/Images.xcassets

assetcatalog_generated_info.plist内容如下:

是必须的AppIconLaunchImage信息

<?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>CFBundleIcons</key>
	<dict>
		<key>CFBundlePrimaryIcon</key>
		<dict>
			<key>CFBundleIconFiles</key>
			<array>
				<string>AppIcon20x20</string>
				<string>AppIcon29x29</string>
				<string>AppIcon40x40</string>
				<string>AppIcon57x57</string>
				<string>AppIcon60x60</string>
			</array>
			<key>CFBundleIconName</key>
			<string>AppIcon</string>
		</dict>
	</dict>
	<key>CFBundleIcons~ipad</key>
	<dict>
		<key>CFBundlePrimaryIcon</key>
		<dict>
			<key>CFBundleIconFiles</key>
			<array>
				<string>AppIcon20x20</string>
				<string>AppIcon29x29</string>
				<string>AppIcon40x40</string>
				<string>AppIcon57x57</string>
				<string>AppIcon60x60</string>
				<string>AppIcon50x50</string>
				<string>AppIcon72x72</string>
				<string>AppIcon76x76</string>
				<string>AppIcon83.5x83.5</string>
			</array>
			<key>CFBundleIconName</key>
			<string>AppIcon</string>
		</dict>
	</dict>
	<key>UILaunchImages</key>
	<array>
		<dict>
			<key>UILaunchImageMinimumOSVersion</key>
			<string>11.0</string>
			<key>UILaunchImageName</key>
			<string>LaunchImage-1100-Portrait-2436h</string>
			<key>UILaunchImageOrientation</key>
			<string>Portrait</string>
			<key>UILaunchImageSize</key>
			<string>{375, 812}</string>
		</dict>
		<dict>
			<key>UILaunchImageMinimumOSVersion</key>
			<string>8.0</string>
			<key>UILaunchImageName</key>
			<string>LaunchImage-800-Portrait-736h</string>
			<key>UILaunchImageOrientation</key>
			<string>Portrait</string>
			<key>UILaunchImageSize</key>
			<string>{414, 736}</string>
		</dict>
		<dict>
			<key>UILaunchImageMinimumOSVersion</key>
			<string>8.0</string>
			<key>UILaunchImageName</key>
			<string>LaunchImage-800-667h</string>
			<key>UILaunchImageOrientation</key>
			<string>Portrait</string>
			<key>UILaunchImageSize</key>
			<string>{375, 667}</string>
		</dict>
		<dict>
			<key>UILaunchImageMinimumOSVersion</key>
			<string>7.0</string>
			<key>UILaunchImageName</key>
			<string>LaunchImage-700</string>
			<key>UILaunchImageOrientation</key>
			<string>Portrait</string>
			<key>UILaunchImageSize</key>
			<string>{320, 480}</string>
		</dict>
		<dict>
			<key>UILaunchImageMinimumOSVersion</key>
			<string>7.0</string>
			<key>UILaunchImageName</key>
			<string>LaunchImage-700-568h</string>
			<key>UILaunchImageOrientation</key>
			<string>Portrait</string>
			<key>UILaunchImageSize</key>
			<string>{320, 568}</string>
		</dict>
		<dict>
			<key>UILaunchImageMinimumOSVersion</key>
			<string>7.0</string>
			<key>UILaunchImageName</key>
			<string>LaunchImage-700-Portrait</string>
			<key>UILaunchImageOrientation</key>
			<string>Portrait</string>
			<key>UILaunchImageSize</key>
			<string>{768, 1024}</string>
		</dict>
	</array>
</dict>
</plist>

assetcatalog_dependencies 文件内容主要是AppIconLaunchImage的文件名称


处理结果:

/* com.apple.actool.compilation-results */
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/AppIcon29x29.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/AppIcon57x57.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/AppIcon20x20~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/AppIcon29x29~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/AppIcon40x40~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/AppIcon50x50~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/AppIcon72x72~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/AppIcon76x76~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/LaunchImage-700-Portrait~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/aaa@qq.com~ipad.png
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/Assets.car
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/assetcatalog_generated_info.plist

.appInfo.plist 中的 AppIcon

Xcode编译App(三): 编译整个项目的最终Target


.appInfo.plist 中的 UILaunchImages

   <key>UILaunchImages</key>
    <array>
      <dict>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageName</key>
        <string>LaunchImage-1100-Portrait-2436h</string>
        <key>UILaunchImageSize</key>
        <string>{375, 812}</string>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>11.0</string>
      </dict>
      <dict>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageName</key>
        <string>LaunchImage-800-Portrait-736h</string>
        <key>UILaunchImageSize</key>
        <string>{414, 736}</string>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>8.0</string>
      </dict>
      <dict>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageName</key>
        <string>LaunchImage-800-667h</string>
        <key>UILaunchImageSize</key>
        <string>{375, 667}</string>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>8.0</string>
      </dict>
      <dict>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageName</key>
        <string>LaunchImage-700</string>
        <key>UILaunchImageSize</key>
        <string>{320, 480}</string>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>7.0</string>
      </dict>
      <dict>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageName</key>
        <string>LaunchImage-700-568h</string>
        <key>UILaunchImageSize</key>
        <string>{320, 568}</string>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>7.0</string>
      </dict>
      <dict>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageName</key>
        <string>LaunchImage-700-Portrait</string>
        <key>UILaunchImageSize</key>
        <string>{768, 1024}</string>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>7.0</string>
      </dict>

Xcode编译App(三): 编译整个项目的最终Target

ProcessInfoPlistFile (处理 info.plsit 信息)

处理 info.plist 文件,把上面的处理 .xcassets 生成的 plist 文件合并到当前的 info.plist 文件上

命令是 builtin-infoPlistUtility

// 处理 info.plist 文件,把上面的处理 .xcassets 生成的 plist 文件合并到当前的 info.plist 文件上
ProcessInfoPlistFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/Info.plist /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Info.plist (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    builtin-infoPlistUtility /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/MyAppName/Info.plist 
    -genpkginfo /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/PkgInfo 
    -expandbuildsettings 
    -format binary 
    -platform iphonesimulator 
    -additionalcontentfile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Base.lproj/LaunchScreen-SBPartialInfo.plist 
    -additionalcontentfile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Base.lproj/Main-SBPartialInfo.plist 
    -additionalcontentfile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MHChildRearingHome-SBPartialInfo.plist 
    -additionalcontentfile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/assetcatalog_generated_info.plist 
    -o /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app/Info.plist

对比两个plist 文件内容,会有一些不同

Info.plist的key值 项目中Info.plist .app文件夹中Info.plist 备注
CFBundleExecutable $(EXECUTABLE_NAME) MyAppName 可执行文件名称
CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) 11111 替换实际的bundle id
CFBundleName $(PRODUCT_NAME) MyAppName
CFBundleIcons 空值 有具体值,见下面
CFBundleIcons~ipad 空值 见下面
UILaunchImages 没有key 见下面
DTCompiler 没有key com.apple.compilers.llvm.clang.1_0 编译器
DTPlatformVersion 没有key 12.1 编译的目标平台版本
DTPlatformBuild 没有key 16B91
DTPlatformName 没有key iphoneos
DTSDKName 没有key iphoneos12.1 编译的sdk名称
DTSDKBuild 没有key 16B91 编译的sdk的build版本号
DTXcodeBuild 没有key 10B61
DTXcode 没有key 1010 Xcode的版本号
DTAppStoreToolsBuild 没有key 10B61
BuildMachineOSBuild 没有key 18A391
CFBundleSupportedPlatforms 没有key 数组类型: iPhoneOS 支持的平台
MinimumOSVersion 没有key 7.0 支持的最大系统版本
UIDeviceFamily 没有key 数组: 1、2 1表示iPhone和iPod;2表示iPad

LinkStoryboards 链接前面生成的 storyboradc

命令工具是 /Applications/Xcode.app/Contents/Developer/usr/bin/ibtool

// 链接 .storyboardc 文件
LinkStoryboards (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    export XCODE_DEVELOPER_USR_PATH=/Applications/Xcode.app/Contents/Developer/usr/bin/..
    /Applications/Xcode.app/Contents/Developer/usr/bin/ibtool 
    --errors 
    --warnings 
    --notices 
    --module MyAppName 
    --target-device iphone 
    --target-device ipad 
    --minimum-deployment-target 7.0 
    --output-format human-readable-text 
    --link /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app 
    /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Base.lproj/LaunchScreen.storyboardc 
    /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Base.lproj/Main.storyboardc 
    /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MHChildRearingHome.storyboardc

七、脚本文件 Copy Pods Resources

Pod 项目中的资源文件(.bundle)拷贝到 .app 文件夹下面

看下XcodeBuild Phases内容如下:

Xcode编译App(三): 编译整个项目的最终Target

// 写入辅助文件 .sh 脚本文件 (Copy Pods Resources)
WriteAuxiliaryFile /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Script-5A2B58FAD3740B34882140C7.sh (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    write-file /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Script-5A2B58FAD3740B34882140C7.sh
    
// 执行脚本文件,把 pod 中的 bundle 文件拷贝到 .app 文件夹下
PhaseScriptExecution [CP]\ Copy\ Pods\ Resources /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Script-5A2B58FAD3740B34882140C7.sh (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    /bin/sh -c /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/Script-5A2B58FAD3740B34882140C7.sh

Script-5A2B58FAD3740B34882140C7.sh 打开内容如下

#!/bin/sh
"${PODS_ROOT}/Target Support Files/Pods-MyAppName/Pods-MyAppName-resources.sh"

根据路径找到脚本.sh的内容

路径为: ${PODS_ROOT}/Target Support Files/Pods-MyAppName/Pods-MyAppName-resources.sh

Xcode编译App(三): 编译整个项目的最终Target

具体如下:

#!/bin/sh
set -e
set -u
set -o pipefail

function on_error {
  echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
}
trap 'on_error $LINENO' ERR

if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then
  # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy
  # resources to, so exit 0 (signalling the script phase was successful).
  exit 0
fi

mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"

RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
> "$RESOURCES_TO_COPY"

XCASSET_FILES=()

# This protects against multiple targets copying the same framework dependency at the same time. The solution
# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")

case "${TARGETED_DEVICE_FAMILY:-}" in
  1,2)
    TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
    ;;
  1)
    TARGET_DEVICE_ARGS="--target-device iphone"
    ;;
  2)
    TARGET_DEVICE_ARGS="--target-device ipad"
    ;;
  3)
    TARGET_DEVICE_ARGS="--target-device tv"
    ;;
  4)
    TARGET_DEVICE_ARGS="--target-device watch"
    ;;
  *)
    TARGET_DEVICE_ARGS="--target-device mac"
    ;;
esac

install_resource()
{
  if [[ "$1" = /* ]] ; then
    RESOURCE_PATH="$1"
  else
    RESOURCE_PATH="${PODS_ROOT}/$1"
  fi
  if [[ ! -e "$RESOURCE_PATH" ]] ; then
    cat << EOM
error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
EOM
    exit 1
  fi
  case $RESOURCE_PATH in
    *.storyboard)
      echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
      ;;
    *.xib)
      echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
      ;;
    *.framework)
      echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
      mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
      echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
      rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
      ;;
    *.xcdatamodel)
      echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true
      xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom"
      ;;
    *.xcdatamodeld)
      echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true
      xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd"
      ;;
    *.xcmappingmodel)
      echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true
      xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
      ;;
    *.xcassets)
      ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
      XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
      ;;
    *)
      echo "$RESOURCE_PATH" || true
      echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY"
      ;;
  esac
}
if [[ "$CONFIGURATION" == "Debug" ]]; then
  install_resource "${PODS_ROOT}/AMap3DMap/MAMapKit.framework/AMap.bundle"
  install_resource "${PODS_ROOT}/LBXScan/LBXScan/UI/CodeScan.bundle"
  install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MHBaseClass/MHBaseClass.bundle"
  install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MHBaseClass/MHBaseClassAssets.bundle"
  install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MHHudManager/MHHudManager.bundle"
  install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MHUIKit/MHUIKit.bundle"
  install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MHUIKit/MHScoreUnit.bundle"
  install_resource "${PODS_ROOT}/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle"
  install_resource "${PODS_ROOT}/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle"
fi
if [[ "$CONFIGURATION" == "Release" ]]; then
  install_resource "${PODS_ROOT}/AMap3DMap/MAMapKit.framework/AMap.bundle"
  install_resource "${PODS_ROOT}/LBXScan/LBXScan/UI/CodeScan.bundle"
  install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MHBaseClass/MHBaseClass.bundle"
  install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MHBaseClass/MHBaseClassAssets.bundle"
  install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MHHudManager/MHHudManager.bundle"
  install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MHUIKit/MHUIKit.bundle"
  install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MHUIKit/MHScoreUnit.bundle"
  install_resource "${PODS_ROOT}/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle"
  install_resource "${PODS_ROOT}/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle"
fi

mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then
  mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
fi
rm -f "$RESOURCES_TO_COPY"

if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ]
then
  # Find all other xcassets (this unfortunately includes those of path pods and other targets).
  OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
  while read line; do
    if [[ $line != "${PODS_ROOT}*" ]]; then
      XCASSET_FILES+=("$line")
    fi
  done <<<"$OTHER_XCASSETS"

  if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then
    printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
  else
    printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist"
  fi
fi

build中的log如下:

/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/AMap3DMap/MAMapKit.framework/AMap.bundle
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/LBXScan/LBXScan/UI/CodeScan.bundle
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHBaseClass/MHBaseClass.bundle
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHBaseClass/MHBaseClassAssets.bundle
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHHudManager/MHHudManager.bundle
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHUIKit/MHUIKit.bundle
/Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MHUIKit/MHScoreUnit.bundle
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.bundle
/Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle
building file list ... done
AMap.bundle/
AMap.bundle/GNaviConfig.xml
AMap.bundle/res.zip
AMap.bundle/AMap3D.bundle/
AMap.bundle/AMap3D.bundle/3d_navi_sky_day.data
AMap.bundle/AMap3D.bundle/3d_sky_day.data
AMap.bundle/AMap3D.bundle/3d_sky_night.data
AMap.bundle/AMap3D.bundle/3dlandscape.xml
AMap.bundle/AMap3D.bundle/3dportrait.xml
AMap.bundle/AMap3D.bundle/bktile.data
AMap.bundle/AMap3D.bundle/bktile_n.data
AMap.bundle/AMap3D.bundle/building.data
AMap.bundle/AMap3D.bundle/config_1_14_1510107091.data
AMap.bundle/AMap3D.bundle/config_2_14_1510107001.data
AMap.bundle/AMap3D.bundle/crossing_day_bk.data
AMap.bundle/AMap3D.bundle/crossing_nigth_bk.data
AMap.bundle/AMap3D.bundle/dash.data
AMap.bundle/AMap3D.bundle/dash_cd.data
AMap.bundle/AMap3D.bundle/dash_tq.data
AMap.bundle/AMap3D.bundle/gconfig_1_14_1484563173.data
AMap.bundle/AMap3D.bundle/icons_10_14_1510107265.data
AMap.bundle/AMap3D.bundle/icons_11_14_1510107270.data
AMap.bundle/AMap3D.bundle/icons_1_14_1517312363.data
AMap.bundle/AMap3D.bundle/icons_23_14_1514285400.data
AMap.bundle/AMap3D.bundle/icons_24_14_1510107285.data
AMap.bundle/AMap3D.bundle/icons_25_14_1510054937.data
AMap.bundle/AMap3D.bundle/icons_26_14_1510107290.data
AMap.bundle/AMap3D.bundle/icons_27_14_1517312468.data
AMap.bundle/AMap3D.bundle/icons_2_14_1517312372.data
AMap.bundle/AMap3D.bundle/icons_32_14_1517312481.data
AMap.bundle/AMap3D.bundle/icons_33_14_1510107307.data
AMap.bundle/AMap3D.bundle/icons_35_14_1521026482.data
AMap.bundle/AMap3D.bundle/icons_3_14_1517312381.data
AMap.bundle/AMap3D.bundle/icons_4_14_1510107228.data
AMap.bundle/AMap3D.bundle/icons_50_14_1501055190.data
AMap.bundle/AMap3D.bundle/icons_5_14_1517312288.data
AMap.bundle/AMap3D.bundle/icons_6_14_1510107235.data
AMap.bundle/AMap3D.bundle/icons_7_14_1510107241.data
AMap.bundle/AMap3D.bundle/icons_8_14_1517312432.data
AMap.bundle/AMap3D.bundle/icons_9_14_1517312442.data
AMap.bundle/AMap3D.bundle/lineround.data
AMap.bundle/AMap3D.bundle/roadarrow.data
AMap.bundle/AMap3D.bundle/search_scenic_icon.data
AMap.bundle/AMap3D.bundle/style_0_14_1520856789.data
AMap.bundle/AMap3D.bundle/style_100_14_1521026633.data
AMap.bundle/AMap3D.bundle/style_10_14_1510107620.data
AMap.bundle/AMap3D.bundle/style_13_14_1517302048.data
AMap.bundle/AMap3D.bundle/style_14_14_1517302061.data
AMap.bundle/AMap3D.bundle/style_15_14_1520821838.data
AMap.bundle/AMap3D.bundle/style_16_14_1515641762.data
AMap.bundle/AMap3D.bundle/style_17_14_1510122186.data
AMap.bundle/AMap3D.bundle/style_18_14_1517302071.data
AMap.bundle/AMap3D.bundle/style_19_14_1515641010.data
AMap.bundle/AMap3D.bundle/style_1_14_1520908388.data
AMap.bundle/AMap3D.bundle/style_20_14_1517301960.data
AMap.bundle/AMap3D.bundle/style_21_14_1517301977.data
AMap.bundle/AMap3D.bundle/style_22_14_1510123381.data
AMap.bundle/AMap3D.bundle/style_23_14_1510123404.data
AMap.bundle/AMap3D.bundle/style_30_14_1520821733.data
AMap.bundle/AMap3D.bundle/style_31_14_1520821753.data
AMap.bundle/AMap3D.bundle/style_32_14_1520821814.data
AMap.bundle/AMap3D.bundle/style_33_14_1520821825.data
AMap.bundle/AMap3D.bundle/style_3_14_1517301966.data
AMap.bundle/AMap3D.bundle/style_4_14_1520827092.data
AMap.bundle/AMap3D.bundle/style_50_14_1501671321.data
AMap.bundle/AMap3D.bundle/style_5_14_1517301920.data
AMap.bundle/AMap3D.bundle/style_6_14_1517302037.data
AMap.bundle/AMap3D.bundle/style_8_14_1520821790.data
AMap.bundle/AMap3D.bundle/styleiconslist.data
AMap.bundle/AMap3D.bundle/tbl.data
AMap.bundle/AMap3D.bundle/tbl_l.data
AMap.bundle/AMap3D.bundle/tbl_n.data
AMap.bundle/AMap3D.bundle/tgl.data
AMap.bundle/AMap3D.bundle/tgl_l.data
AMap.bundle/AMap3D.bundle/tgl_n.data
AMap.bundle/AMap3D.bundle/tmc_allinone.data
AMap.bundle/AMap3D.bundle/tmc_blind_allinone.data
AMap.bundle/AMap3D.bundle/tmc_blind_amble.data
AMap.bundle/AMap3D.bundle/tmc_blind_congestion.data
AMap.bundle/AMap3D.bundle/tmc_blind_null.data
AMap.bundle/AMap3D.bundle/tmc_blind_severe_congestion.data
AMap.bundle/AMap3D.bundle/tmc_blind_smoothly.data
AMap.bundle/AMap3D.bundle/tmc_l_allinone.data
AMap.bundle/AMap3D.bundle/tmc_n_allinone.data
AMap.bundle/AMap3D.bundle/tnl.data
AMap.bundle/AMap3D.bundle/tnl_l.data
AMap.bundle/AMap3D.bundle/tnl_n.data
AMap.bundle/AMap3D.bundle/trl.data
AMap.bundle/AMap3D.bundle/trl_l.data
AMap.bundle/AMap3D.bundle/trl_n.data
AMap.bundle/AMap3D.bundle/tyl.data
AMap.bundle/AMap3D.bundle/tyl_l.data
AMap.bundle/AMap3D.bundle/tyl_n.data
AMap.bundle/AMap3D.bundle/waterline.data
AMap.bundle/AMap3D.bundle/VM3DRes/
AMap.bundle/AMap3D.bundle/VM3DRes/1015.png
AMap.bundle/AMap3D.bundle/VM3DRes/1016.png
AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_day.png
AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_night.png
AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_day.png
AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_night.png
AMap.bundle/AMap3D.bundle/VM3DRes/cross_white_edge.png
AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_day.png
AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_night.png
AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_main_day.png
AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_secondary_day.png
AMap.bundle/AMap3D.bundle/VM3DRes/grass_day.png
AMap.bundle/AMap3D.bundle/VM3DRes/grass_night.png
AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_day.png
AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_night.png
AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_day.png
AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_night.png
AMap.bundle/AMap3D.bundle/weather/
AMap.bundle/AMap3D.bundle/weather/fog.png
AMap.bundle/AMap3D.bundle/weather/haze.png
AMap.bundle/AMap3D.bundle/weather/rain.png
AMap.bundle/AMap3D.bundle/weather/rainmask.png
AMap.bundle/AMap3D.bundle/weather/snow.png
AMap.bundle/AMap3D.bundle/weather/snow_far.png
AMap.bundle/AMap3D.bundle/weather/snowmask.png
AMap.bundle/images/
AMap.bundle/images/arrow_line_inner.png
AMap.bundle/images/arrow_line_outer.png
AMap.bundle/images/calloutArrowMask.png
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/greenPin.png
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/greenPin_lift.png
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/lineDashTexture.png
AMap.bundle/images/lineDashTextureDot.png
AMap.bundle/images/lineDashTextureThin.png
AMap.bundle/images/lineTexture.png
AMap.bundle/images/lineTextureThin.png
AMap.bundle/images/marker_blue.png
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/pin_shadow.png
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/purplePin.png
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/purplePin_lift.png
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/redPin.png
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/redPin_lift.png
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/select_.png
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/aaa@qq.com
AMap.bundle/images/traffic_texture_blue.png
AMap.bundle/images/traffic_texture_darkred.png
AMap.bundle/images/traffic_texture_gray.png
AMap.bundle/images/traffic_texture_green.png
AMap.bundle/images/traffic_texture_red.png
AMap.bundle/images/traffic_texture_yellow.png
AMap.bundle/offline/
AMap.bundle/offline/offlinePackage.plist
CodeScan.bundle/
CodeScan.bundle/aaa@qq.com
CodeScan.bundle/aaa@qq.com
CodeScan.bundle/aaa@qq.com
CodeScan.bundle/aaa@qq.com
CodeScan.bundle/aaa@qq.com
CodeScan.bundle/aaa@qq.com
CodeScan.bundle/aaa@qq.com
CodeScan.bundle/aaa@qq.com
CodeScan.bundle/aaa@qq.com
CodeScan.bundle/qrcode_scan_full_net.png
CodeScan.bundle/aaa@qq.com
CodeScan.bundle/qrcode_scan_part_net.png
CodeScan.bundle/aaa@qq.com
CodeScan.bundle/aaa@qq.com
MHBaseClass.bundle/
MHBaseClass.bundle/Info.plist
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/aaa@qq.com
MHBaseClass.bundle/_CodeSignature/
MHBaseClass.bundle/_CodeSignature/CodeDirectory
MHBaseClass.bundle/_CodeSignature/CodeRequirements
MHBaseClass.bundle/_CodeSignature/CodeRequirements-1
MHBaseClass.bundle/_CodeSignature/CodeResources
MHBaseClass.bundle/_CodeSignature/CodeSignature
MHBaseClassAssets.bundle/
MHBaseClassAssets.bundle/Assets.car
MHBaseClassAssets.bundle/Info.plist
MHBaseClassAssets.bundle/_CodeSignature/
MHBaseClassAssets.bundle/_CodeSignature/CodeDirectory
MHBaseClassAssets.bundle/_CodeSignature/CodeRequirements
MHBaseClassAssets.bundle/_CodeSignature/CodeRequirements-1
MHBaseClassAssets.bundle/_CodeSignature/CodeResources
MHBaseClassAssets.bundle/_CodeSignature/CodeSignature
MHHudManager.bundle/
MHHudManager.bundle/Info.plist
MHHudManager.bundle/aaa@qq.com
MHHudManager.bundle/aaa@qq.com
MHHudManager.bundle/aaa@qq.com
MHHudManager.bundle/aaa@qq.com
MHHudManager.bundle/aaa@qq.com
MHHudManager.bundle/aaa@qq.com
MHHudManager.bundle/loading1.png
MHHudManager.bundle/loading10.png
MHHudManager.bundle/loading11.png
MHHudManager.bundle/loading12.png
MHHudManager.bundle/loading13.png
MHHudManager.bundle/loading14.png
MHHudManager.bundle/loading15.png
MHHudManager.bundle/loading16.png
MHHudManager.bundle/loading17.png
MHHudManager.bundle/loading18.png
MHHudManager.bundle/loading19.png
MHHudManager.bundle/loading2.png
MHHudManager.bundle/loading20.png
MHHudManager.bundle/loading21.png
MHHudManager.bundle/loading22.png
MHHudManager.bundle/loading23.png
MHHudManager.bundle/loading24.png
MHHudManager.bundle/loading25.png
MHHudManager.bundle/loading26.png
MHHudManager.bundle/loading27.png
MHHudManager.bundle/loading28.png
MHHudManager.bundle/loading29.png
MHHudManager.bundle/loading3.png
MHHudManager.bundle/loading30.png
MHHudManager.bundle/loading31.png
MHHudManager.bundle/loading32.png
MHHudManager.bundle/loading33.png
MHHudManager.bundle/loading34.png
MHHudManager.bundle/loading35.png
MHHudManager.bundle/loading36.png
MHHudManager.bundle/loading4.png
MHHudManager.bundle/loading5.png
MHHudManager.bundle/loading6.png
MHHudManager.bundle/loading7.png
MHHudManager.bundle/loading8.png
MHHudManager.bundle/loading9.png
MHHudManager.bundle/aaa@qq.com
MHHudManager.bundle/aaa@qq.com
MHHudManager.bundle/_CodeSignature/
MHHudManager.bundle/_CodeSignature/CodeDirectory
MHHudManager.bundle/_CodeSignature/CodeRequirements
MHHudManager.bundle/_CodeSignature/CodeRequirements-1
MHHudManager.bundle/_CodeSignature/CodeResources
MHHudManager.bundle/_CodeSignature/CodeSignature
MHScoreUnit.bundle/
MHScoreUnit.bundle/Assets.car
MHScoreUnit.bundle/Info.plist
MHScoreUnit.bundle/_CodeSignature/
MHScoreUnit.bundle/_CodeSignature/CodeDirectory
MHScoreUnit.bundle/_CodeSignature/CodeRequirements
MHScoreUnit.bundle/_CodeSignature/CodeRequirements-1
MHScoreUnit.bundle/_CodeSignature/CodeResources
MHScoreUnit.bundle/_CodeSignature/CodeSignature
MHUIKit.bundle/
MHUIKit.bundle/Info.plist
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/aaa@qq.com
MHUIKit.bundle/_CodeSignature/
MHUIKit.bundle/_CodeSignature/CodeDirectory
MHUIKit.bundle/_CodeSignature/CodeRequirements
MHUIKit.bundle/_CodeSignature/CodeRequirements-1
MHUIKit.bundle/_CodeSignature/CodeResources
MHUIKit.bundle/_CodeSignature/CodeSignature
SVProgressHUD.bundle/
SVProgressHUD.bundle/angle-mask.png
SVProgressHUD.bundle/aaa@qq.com
SVProgressHUD.bundle/aaa@qq.com
SVProgressHUD.bundle/error.png
SVProgressHUD.bundle/aaa@qq.com
SVProgressHUD.bundle/aaa@qq.com
SVProgressHUD.bundle/info.png
SVProgressHUD.bundle/aaa@qq.com
SVProgressHUD.bundle/aaa@qq.com
SVProgressHUD.bundle/success.png
SVProgressHUD.bundle/aaa@qq.com
SVProgressHUD.bundle/aaa@qq.com
TZImagePickerController.bundle/
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/Root.plist
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/aaa@qq.com
TZImagePickerController.bundle/en.lproj/
TZImagePickerController.bundle/en.lproj/Localizable.strings
TZImagePickerController.bundle/vi.lproj/
TZImagePickerController.bundle/vi.lproj/Localizable.strings
TZImagePickerController.bundle/zh-Hans.lproj/
TZImagePickerController.bundle/zh-Hans.lproj/Localizable.strings
TZImagePickerController.bundle/zh-Hant.lproj/
TZImagePickerController.bundle/zh-Hant.lproj/Localizable.strings

sent 5283871 bytes  received 7484 bytes  10582710.00 bytes/sec
total size is 5259048  speedup is 0.99

八、CodeSign 签名

命令工具是 /usr/bin/codesign

就是前面步骤中生成的Entitlements变成的.xcent文件,经过处理放置到.app文件夹下面

// 签名
CodeSign /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
    
Signing Identity:     "-"

    /usr/bin/codesign 
    --force 
    --sign 
    - --entitlements /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Intermediates.noindex/MyAppName.build/Debug-iphonesimulator/MyAppName.build/MyAppName.app.xcent 
    --timestamp=none 
    /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app

Touch /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app (in target: MyAppName)
    cd /Users/ocean/Desktop/code/iOS/Company/Myway/MyAppName/MyAppName
    /usr/bin/touch -c /Users/ocean/Library/Developer/Xcode/DerivedData/MyAppName-eexzhxxmdkygpcfkoprwzzghvpkj/Build/Products/Debug-iphonesimulator/MyAppName.app