質問: お客様からの要望で、Xcode 上で独自の拡張子のファイルを Swift ソースファイルとして認識させたいという要望があります。 ファイルの追加時に、例えば、TestViewController.abcdef のような拡張子を追加すれば当然未定義の拡張子として PlainText 扱いとなり、ソースコードハイライトや補完は効きません。 そこでファイルの Type を Swift Source にすればソースコードハイライトや補完は効くようになったのですが、今度はビルド対象にはならないため Complie Sources に追加しました。しかし、次のようなビルドエラーが出てしまいました。 ``` :0: error: unexpected input file: /〜/TestViewController.abcdef Command CompileSwiftSources failed with a nonzero exit code ``` Xcode のファイルテンプレートなども試したのですが、うまくいきません。 Xcode では独自の拡張子は使用できないのでしょうか? (詳しくは話せませんが開発要件として重要な位置付けとなっているという背景がありますため、無茶な内容は承知の上で、何とかクリアしたいです。)
回答: Xcodeに独自の拡張子を認識させる場合、以下のリンクが参考になるかと思います。 1. Xcodeで適当な新しいCocoa Appプロジェクトを作成 2. ビルドターゲットのInfoタブのExported UTIで新しいUTIを追加 3. UTIの情報を埋めます。 ".abcdef"というファイルをSwiftとして認識させたい場合、 Identifier: 一意になる適当なID(ex. com.yourdomain.abcdef) Conforms To: public.swift-source Extensions: abcdef 4. プロジェクトをビルド 5. Xcodeを再起動 ※新しいUTIを登録するために作ったプロジェクトなので、登録後は上記プロジェクトは破棄して大丈夫です。 ただし、この状態は自動でswiftファイルとしては認識されるようになりますが、手動でType変えたのと同じ様な状態ですので、コンパイル時に質問のエラーが発生しました。 試したところ、コンパイル時のエラーを回避するためには以下を行う必要がありました。 "Build Settings"-"Swift Compiler - Code Generation"の以下の項目について * "Optimization Level"を"No Optimazation [-Onone]"に変更 * "Compilation Mode"を"Whole Module"に変更 上記の時点で実機デバッグ等は行えましたが、Archive実行時にBitcodeを有効にしていた場合エラーが発生します。Bitcodeを無効にすればArchiveの実行までは確認できました。