URL Scheme の追加と Configuration によって変更する方法
環境:
Xcode8.3.2
Swift3
URL Scheme の追加
Target -> Info -> URL Types から URL Scheme を追加する。
まだ何も追加していない状態。
+ボタンを押してidentifier
とURL Schemes
を追加した。
URL Schemes にはカンマ区切りで複数入力も可能。
identifier: com.example.myapp URL Schemes: myapp
Info.plist に URL Types の項目が追加された。
Info.plist のソースコードを直接見ると以下のようになっている。
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLName</key> <string>com.example.myapp</string> <key>CFBundleURLSchemes</key> <array> <string>myapp</string> </array> </dict> </array>
Configuration によって URL Scheme を変更する
Release 環境では上で設定したmyapp
でよいが、Debug 環境ではmyapp-debug
に変更したい。
そこで Run Script を使ってコンパイル時に自動で更新させる。
シェルコマンドは Run Script の入力欄に直接を書いてもよいのだがproject.pbxproj
に埋め込まれてしまうので別ファイルに切り出すことにする。
以下のようにScirptsディレクトリを作成し、そこにシェルスクリプトファイルを置いた。
シェルスクリプトの中身。CONFIGURATION
がDebug
のときのみ書き換えるようになっている。
URL Schemes は複数設定できるが今回は1つ目に設定されたものを更新対象にしているので注意。
#!/bin/sh if [ ${CONFIGURATION} = "Debug" ]; then lower_conf=`echo ${CONFIGURATION} | tr 'A-Z' 'a-z'` myapp_url_scheme="myapp-$lower_conf" info_plist_file_path="${TARGET_BUILD_DIR}/${PRODUCT_NAME}.app/Info.plist" /usr/libexec/PlistBuddy -x -c "Set :CFBundleURLTypes:0:CFBundleURLSchemes:0 $myapp_url_scheme" "$info_plist_file_path" updated_myapp_url_scheme=`/usr/libexec/PlistBuddy -c "Print CFBundleURLTypes:0:CFBundleURLSchemes:0" "$info_plist_file_path"` echo "MyApp URL Scheme set to: $updated_myapp_url_scheme" fi
Build Phases
から新たな Run Script を追加する。
追加する箇所はcompile sources
とcopy bundle resources
フェーズの終わった後。
Run Script
のところをクリックすると名前が変更できる。ここでは以下のように変更した。
先ほど作成したシェルスクリプトを実行させる。
. ${PROJECT_DIR}/Scripts/url_schemes.sh
そしてビルドを実行する。
変更されているか Info.plist を確認。
${TARGET_BUILD_DIR} 以下の Info.plist のパス
~/Library/Developer/Xcode/DerivedData/MySample-gbqatlezfkhslgeiregazsgqloel/Build/Products/Debug-iphonesimulator/MySample.app/Info.plist
myapp-debug
に書き換わっている。
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLName</key> <string>com.example.myapp</string> <key>CFBundleURLSchemes</key> <array> <string>myapp-debug</string> </array> </dict> </array>
Run Script の実行結果はCmd + 8
開く Report Navigator に表示されるのだが、echoコマンドで出力したログはAll Issues
には出ないのでAll Messages
の方で確認する。
ちなみに
echo "error: xxx" echo "warning: xxx"
という書き方をするとAll Issues
の方にもログが出力される。
Fastlane で URL Scheme を更新するやり方は以前書いた。