2017-10-29 13 views
1

私はXcode 9でコマンドラインプロジェクトを持っており、 "Add files to ..."でプロジェクトに追加したテキストファイルを読み込もうとしています。私は、ファイルへのパスをつかむために次の行を使用しています:Bundle.main.pathはプロジェクトに追加されたテキストファイルを見つけません

guard let filePath = Bundle.main.path(forResource: "stops", ofType: "csv") else { 
     fatalError("Cannot find CSV file") 
    } 

私はそれを実行すると、それが致命メッセージを出力します。私は、 "バンドルリソースのコピー"ビルドフェーズでテキストファイルを追加しようとしました。それでもファイルは見つかりません。

私は間違っていますか?

+0

テキストファイルがバンドルに追加されているかどうかを確認します。ビルドフェーズ>バンドルリソースのコピーオプション – Joe

+0

@Joe OPが言った** "バンドルリソースのコピー"ビルドフェーズでテキストファイルを追加しようとしました** –

+1

https://stackoverflow.com/questions/43826866/read-a-file-in-a-macos-command-line-tool-project –

答えて

0

早期私はこれと同じ問題だった昨年 - ここに私の回避策です(と私は、これは周りの作品であることを強調しなければならない、うまくいけば、今それを行うための別の方法があります)

  1. でスウィフトのファイルを作成します。あなたがデータにアクセスするために使用することができ、あなたのプロジェクト(私はRecipe.swiftた)
  2. は、(ターゲット・メンバーシップを無視して - ちょうど便宜のために(私がRecipe.jsonた))のXcodeにあなたのCSVをドロップ
  3. データをロードするために実行スクリプトのフェーズを作成します。あなたのCSVからSwiftクラスへ:

    set -e 
    DATA=$(cat "./MyProject/recipe.json" | base64) 
    echo "import Foundation" > "./MyProject/Recipe.swift" 
    echo "class Recipe {" >> "./MyProject/Recipe.swift" 
    echo " static let data = \"$DATA\"" >> "./MyProject/Recipe.swift" 
    echo "}" >> "./MyProject/Recipe.swift" 
    

これは次のようになりますあなたのスウィフトのファイルにクラスを生成します。

import Foundation 
    class Recipe { 
     static let data = "..." 
} 

をそして、あなたはそれを使用する必要がある場合、あなたはRecipe.dataをデコードすることができます。

もちろん、これは非常に拡張可能な解決策ではありません。遅延初期化を使用して、生成されたクラスに直接base64デコードを追加し、スクリプトのパスを$SRCROOTなどに相対的に変更することで、これは私がプロジェクトの残りの部分で作業を続けることを可能にしたちょっとした速い解決策でした。

関連する問題