Xcode
iOS

Xcode5でiOS6 SDKを使う。

More than 1 year has passed since last update.

実際は古いアプリは古いXcodeのままのほうがトラブルもありませんが、
必要に迫られた際のメモとして。

目的

Xcode5でビルドするアプリのBase SDKに、iOS6を指定できるようにする。

手順

Xcode4のダウンロード

iOS SDK6はXcode4.xに含まれているため、過去のバージョンのダウンロードページから探します。
iOS Dev Centerにサインインし、Downloads > Looking for an older version of Xcode? からXcode4.xを探します。

downloads.png

ダウンロードしたらdmgをマウントしてアプリをコピーしますが、
/Applicationsディレクトリに上書きしないよう注意してください。

一旦デスクトップ等にコピーしておき、 "Xcode4.6.3.app" にリネームします。

mv ~/Desktop/Xcode.app /Applications/Xcode4.6.3.app

これで、AppStoreによって更新される最新のXcode.appと
独立したXcode4.6.3.appが共存できます。


TIPS

もしコマンドラインの xcodebuildxcrun を使っている場合、
これからは使用するXcodeを切り替えてから行うようにします。

# 以降のコマンドでXcode4.6.3を使用する
sudo xcode-select --switch /Applications/Xcode4.6.3.app/Content/Developer

# 最新版に戻す
sudo xcode-select --switch /Applications/Xcode.app/Content/Developer

iOS SDK6を参照させる作業

iOS SDKは Xcode.app のパッケージ内に含まれており、関連するファイルパスは次のとおりです。

# iPhoneOS SDK一式
Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOSx.x.sdk

# Build Settingsで選択できるiOS SDKの定義
Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/version.plist

上記のiOS SDKのディレクトリをXcode5からも見えるようにし、
あわせてSDK定義を追記してやればOKです。

まずは、Xcode4.6.3内のiPhoneOS6.1.sdkへのシンボリックリンクを
Xcode5側に作成してやります。

(※Qiita上で長いパスを書きたくないので変数にしてますが、当然不要です)

XCODE5_APP=/Applications/Xcode.app
XCODE4_APP=/Applications/Xcode4.6.3.app
IPHONE_OS_SDK=/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk
ln -s ${XCODE4_APP}${IPHONE_OS_SDK} ${XCODE5_APP}${IPHONE_OS_SDK}

続いて、SDK定義をXcode4.6.3からコピーして、Xcode5のほうに追記してやります。
初期状態ではXcode5の方はこんな感じになっています。

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/version.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>BuildVersion</key>
    <string>668</string>
    <key>CFBundleShortVersionString</key>
    <string>7.0</string>
    <key>ProductBuildVersion</key>
    <string>11A465</string>
    <key>ProjectName</key>
    <string>iPhonePlatformSupport</string>
    <key>SourceVersion</key>
    <string>2036000000000000</string>
</dict>
</plist>

iOS 7.0だけが定義されていますね。Xcode4.6.3の方も見てみましょう。

/Applications/Xcode4.6.3.app/Contents/Developer/Platforms/iPhoneOS.platform/version.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>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>
</plist>

こちらはiOS 6.1だけが定義されています。
この定義をまるごとXcode5のほうにコピペしてやり、最終的に次のようにします。

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/version.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">
<array>
    <dict>
        <key>BuildVersion</key>
        <string>668</string>
        <key>CFBundleShortVersionString</key>
        <string>7.0</string>
        <key>ProductBuildVersion</key>
        <string>11A465</string>
        <key>ProjectName</key>
        <string>iPhonePlatformSupport</string>
        <key>SourceVersion</key>
        <string>2036000000000000</string>
    </dict>
    <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>

この状態で、Xcode5を起動してBase SDKのリストを確認してみます。

finish.png

無事、iOS 6.1が選択できるようになりました。

以上です。