Help us understand the problem. What is going on with this article?

Xcode5でiOS6 SDKを使う。

More than 5 years have 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が選択できるようになりました。

以上です。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away