iOS build SDK old version

Objective-Cに肩まで浸っていた人間が、Swiftに手を出すことになった際の困ったこと備忘録。
基本的に、検索ワードにしか見えない記事タイトルでお送りします。

 

・それで、今日は何があったのか?

SwiftだけでなくObjective-Cでもそうなんだけれど、iOSってXcodeでビルドするのが一般的。
この時、Xcodeのバージョンが上がっていくと古いiOS向けのビルドが出来なくなる事がある。
例えばiOS6まで使用出来ていたPrivate APIを使いたくてXcodeを起動したら、既に7やら8になっていましたという状況。
当然ながらOSXでXcodeの対応バージョンが縛られているので、古いXcode引っ張り出してきてもどうにもならない。

・結局、何をしたら動くのか?

古いOSXとXcodeのMacを引っ張り出すのが嫌な場合、抜け道的なやり方を使おう。
SDKさえ使えてしまえばどうにかなるので、まずは対象のバージョンとなるXcodeをダウンロードしてくるところから。
Xcodeの入手は割愛するけれど、注意点としてはインストール時に新しいバージョンのものと統合しないようにすること。

 

1.前準備

Xcodeのダウンロード&インストール。
※Xcode-4.6.3みたいな感じで名前をつけてやって区別すると管理しやすいと個人的に思う。

 

2.古いSDKの参照

Xcode.app内にあるSDKを参照させるので、まずはファイルパスを調べてみよう。
※ここでは上記の例をもとにして、古いXcodeはXcode-4.6.3.app、最新のXcodeはデフォルト値のXcode.appとする。

iOS6.1 SDKの場所は下記の通り。
/Applications/Xcode4.6.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk

 

3.シンボリックリンクを作成

やってる事はコマンドの通り。
Xcode-4.6.3.appのiOS6.1SDKを、Xcode.appの同じ箇所にシンボリックリンク作成するだけ。
ln -s ${/Applications/Xcode4.6.3.app}${/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk}
${/Applications/Xcode.app}${/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk}

 

4.SDK定義ファイルの追記

ついでに、Build SettingのArchitecturesでSDKを選択できるようにしたい。
なのでSDK定義をしているplistファイルもメモっておきたい。
plistファイルの場所は下記の通り。

旧:/Applications/Xcode-4.6.3.app/Contents/Developer/Platforms/iPhoneOS.platform/version.plist
新:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/version.plist

plistファイルの追記内容としては、旧plist内にある<dict>~</dict>の情報を新plistに移植するだけ。
この際、二つの<dict>~</dict>を同一階層の<array></array>に配置すれば良し。

<?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”>
<array>
<!— 最新版SDK —>
<dict>
<key>BuildVersion</key>
<string>942</string>
<key>CFBundleShortVersionString</key>
<string>9.2</string>
<key>CFBundleVersion</key>
<string>9.2</string>
<key>ProductBuildVersion</key>
<string>13C75</string>
<key>ProjectName</key>
<string>PlatformSupport</string>
<key>SourceVersion</key>
<string>29000000000000</string>
</dict>
<!— iOS6.1版SDK —>
<dict>
<key>BuildVersion</key>
<string>774</string>
<key>CFBundleShortVersionString</key>
<string>6.1</string>
<key>ProductBuildVersion</key>
<string>10B141</string>
<key>ProjectName</key>
<string>iPhonePlatformSupport</string>
<key>SourceVersion</key>
<string>1824000000000000</string>
</dict>
</array>
</plist>

ここまでやれば、Build SettingsのBase SDK項目で旧バージョンのSDKが選択できるはず。
ディスク容量を圧迫する事についてはノーコメントでお送りします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>