XCode10がリリースされ、早速手元にあるXCode9でビルドしたアプリもXCode10用にビルドしようとした際に以下のエラーが発生しました。
error: Multiple commands produce '/Users/{アカウント名}/Library/Developer/Xcode/DerivedData/{アプリ名}-hievebmhhbbmlybyrcuahkuwpdgk/Build/Products/Debug-iphonesimulator/{アプリ名}.app': 1) Target '{アプリ名}' has create directory command with output '/Users/{アカウント名}/Library/Developer/Xcode/DerivedData/{アプリ名}-hievebmhhbbmlybyrcuahkuwpdgk/Build/Products/Debug-iphonesimulator/{アプリ名}.app' 2) That command depends on command in Target '{アプリ名}': script phase “[CP] Copy Pods Resources”
原因は、XCodeのbuildシステムのデフォルトが変更された事によります。
buildシステムについては、以下から確認できます。
上記のように、XCode10からは、New Build Systemがデフォルトになっています。
(XCode9までは、Legacy Build Systemに該当するものがこれに当たります)
これに対する対処法は、2通りあります。
- Product Nameで${TARGET_NAME}を使うのをやめる
- Legacy Build Systemを採用する
結論を言うと、私は今回の対応で2を選択しました。
今回は、それぞれの対応方法についでご紹介します。
対応方法1 Product Nameで${TARGET_NAME}を使うのをやめる
おそらくこれが推奨されるやり方です。
Build Settings -> Product Name
ここに${TARGET_NAME}で設定されているものを、環境変数を使うのではなくて、手打ちでProduct Nameを入力します。
今回、私がやったのはTimeHackerアプリの設定を行ったので、「TimeHacker」と入力しました。
後は、WidgetやWatchでも同様の事を実施して、Buildするだけです。
…が、私の場合、おそらくCocoaPodsのパッケージ依存か何かでうまく動きませんでした。
対応方法2 Legacy Build Systemを採用する
冒頭で紹介したWorkspace Settings...の設定をLegacy Build Systemに変更します。
これでこれまでのBuild(XCode9までのBuild)が実行されます。
最後に
New Build SystemはSwift製と言うのと、今後、こちらをデファクトスタンダードになっていくと思われます。
Podsやパッケージが対応されたら、New Build Systemにうつしていこうと思います。