這次拿到一個需要二次開發的項目,案主合作的廠商有開發一個 Framework 再一次封裝了 Apple 相關的 API.
不過拿到以後卻沒有辦法很順利的 build 到手機上並執行,這過程會跳出一些錯誤。
比如在模擬器上執行的時候會跳出:
1 |
ld: warning: ignoring file /Users/slamdon/Don/1-Code/Projects/2018/dxHome/dxHomeKit.framework/dxHomeKit, missing required architecture x86_64 in file ...... |
又比如嘗試在 iPhone 7 Plus 上執行的時候會跳出:
1 |
No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=i386 x86_64). |
可以通過在 Build Settings 中去設定 Architectures 來編譯一份設備可以跑的檔案。
Build Settings Architecture
Architectures
指定工程支持指令集的集合,設置多個 Architecture 則會在生成的包中包含多個指令集的 code.
Valid Architectures
Architectures 和 Valid Architectures 的交集會確定最終數據包中包含的指令集。
Build Active Architecture Only
是否只針對當前連接設備所支持的指令集編譯,默認 Debug 為 YES, Release 為 NO.
ARM 處理器指令集
蘋果 A7 處理器支持兩個不同的指令集,32位 ARM 指令集(armv6 | armv7 | armv7s),64位 ARM 指令集 (arm64)
Mac 處理器指令集(i386 | x86_64)其中 i386 是針對 intel 通用微處理器 32位架構的,x86_64 是針對 x86 架構的 64位處理器。
使用 iOS 模擬器的時候會用到 i386 | x86_64 的指令集,因為 Macbook 用的是 Intel 的處理器。
iOS 設備指令集
- ARMv8/ARM64 – iPhone 5s ~ iPhone X, iPad Air ~ iPad 5th
- ARMv7s: iPhone 5/5c, iPad 4th
- ARMv7: iPhone 3GS~4s, iPad 1st ~ iPad 3rd