Open4

macOS/iOS環境用の開発補助ツール

yohhoyyohhoy

バンドル(Bundle)

Bundle Programming Guide

Bundles are a fundamental technology in macOS and iOS that are used to encapsulate code and resources.

  • Application Bundle:実行可能なアプリケーション。拡張子.app
    • iOS Application Bundle と macOS Application Bundle に分類される(iPadは前者へ)
  • Framework Bundle:再利用可能なコード+リソース。拡張子.framework
  • Loadable Bundle(macOSのみ):動的ロード可能なコード。拡張子.bundleなど。
  • XCFramework Bundle(Xcode11以降):複数ターゲット向けFrameworkをまとめたもの。拡張子.xcframework

バージョニング管理

正しく理解する iOS アプリのバージョニング

  • CFBundleShortVersionString: リリースバージョン
  • CFBundleVersion: ビルドバージョン
yohhoyyohhoy

CPUアーキテクチャ

arch macOS iOS/iPadOS tvOS watchOS
x86_64
(simulator)

(simulator)

(simulator)
armv7
armv7s
armv7k
arm64
(Apple Silicon)
arm64e
arm64_32

(docs.elementscompiler.com, CPU Architecturesをもとに作成)

2021年現在、armv6(ARM 32bit)やi386(Intel 32bit)はサポートされない。
armv7はiPhone 4/4S以降/armv7sはiOS 6.0, iPhone 5/5C, iPad 4以降/armv64はiOS 7.0, iPhone 5S, iPad Air以降。
arm64e==PACs(Pointer Authentication Code)有効なARMv8.3命令セット。LLVM Dev Meeting 2019, arm64e - An ABI for Pointer Authentication
armv7k==ポインタ長32bitのarmv7バリアント/arm64_32==ポインタ長32bitのarm64バリアント。

Apple公式Xcodeサポートページ

yohhoyyohhoy

包含アーキテクチャ判別

$ file yourlib
yourlib : Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit dynamically linked shared library x86_64] [arm64:Mach-O 64-bit dynamically linked shared library arm64]
yourlib (for architecture x86_64):    Mach-O 64-bit dynamically linked shared library x86_64
yourlib (for architecture arm64):    Mach-O 64-bit dynamically linked shared library arm64

$ lipo -archs yourlib
x86_64 arm64

Bitcode包含判定

How to check a static library is built contain bitcode?

$ otool -l yourlib.a | grep __LLVM

静的ライブラリにシンボル__LLVMが含まれるか否かで判定可能。