web-dev-qa-db-ja.com

新しいSceneKitアプリケーションでストックファイルを置き換えようとするとコード署名エラーが発生する

Xcode 8は最近リリースされましたが、この問題の正確な原因についてはまだわかりません(Xcodeのベータ版であるか、何らかの理由で何か間違ったことをしているのかもしれません)。

当面の問題は、新しいSceneKitアプリケーションを作成しようとしており、現在.scnファイルをいじっていることです。

「hero.scnassets」内に.scnファイル「hero.scn」を作成し、「heroTexture.png」という名前でhero.scnassetsフォルダー内に.pngファイルも提供しました

「GameViewController.Swift」ファイルでこのプロジェクト用にXcode 8.0ベータ1によって通常提供されるコードは、次のように編集されました。

元のコード:

...
let scene = SCNScene(named: "art.scnassets/ship.scn")!
...
let ship = scene.rootNode.childNode(withName: "ship", recursively: true)!
ship.run(SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: 2, z: 0, duration: 1)))

編集済みコード:

...
let scene = SCNScene(named: "hero.scnassets/hero.scn")!
...
let hero = scene.rootNode.childNode(withName: "hero", recursively: true)!
hero.run(SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: 2, z: 0, duration: 1)))

受信エラー:

.../Xapp.app: resource fork, Finder information, or similar detritus not allowed
Command /usr/bin/codesign failed with exit code 1

質問の結論:

単にファイルを置き換えるだけで、署名エラーが発生するのはなぜですか?

補足:コード署名の問題を解決する方法は知っていますが、それにはプロジェクト全体を再起動する必要があります(気にしません)。しかし、私が直面する問題は、ファイルを変更するたびに、このエラーが発生することです。

PS:簡単にするために、ファイル構造を示します。 FileStruct

25

3つの簡単な手順でこのビルドエラーを取り除きます。

1)アプリに関連する最新のフォルダーをDerivedData(〜/ Library/Developer/Xcode/DerivedData)から削除します

2)ターミナルで、現在のプロジェクトディレクトリにcdします

3)実行

xattr -rc。

すべての拡張属性(通常はPhotoshopで以前に編集された画像ファイルに関連する)を削除する

アプリを再構築してください!

109
ecume des jours

エラーは、画像ファイル内の属性に起因しています。

これは、すべてのpngファイルを検索し、それらの属性を削除する簡単なコマンドです。これをプロジェクトのルートディレクトリでターミナルから実行します。再構築、クリーン、問題解決。

find . -type f -name '*.png' -exec xattr -c {} \;
18
Mark McCorkle

MacOSの開発バージョンをインストールした後、resource fork, Finder information, or similar detritus not allowedエラーが発生しました。私の場合は、一部のファイルの無効な属性が原因でした。

このようにファイルに設定されたcom.Apple.FinderInfo属性を検索して修正しました

ls -alR@ . > investigate.txt

ここで、お気に入りのテキストエディターでexamine.txtを開き、com.Apple.FinderInfoの検索を実行し、この属性が設定されているすべてのファイルの属性をクリアします。あなたはそれを使ってそれを行うことができます

xattr -c <filename>例: xattr -c iTunesArtwork.png

すべてのファイルをクリアしたら、アプリにコード署名することができました。

9
Peter Theill

Finder情報を削除できず、再起動が機能しませんでした。私(Sierraベータ版がインストールされています)の理由は、プロジェクトがiCloudと同期されるDocumentsフォルダーにあったためです。 iCloudと同期していないフォルダーにプロジェクトを作成するとすぐに問題なく動作したので、バグはXcodeではなくiCloudでも発生する可能性があります。

1
Sophie Clark

これで問題が解決したようです。プロジェクトのルートフォルダーの外側に.atlasフォルダー(つまり、「myImages.atlas」)を作成します。画像を.atlasフォルダーに追加します。次に、プロジェクト内から.atlasフォルダーに「ファイルを追加...」します(注:.atlasフォルダーをart.scnasstesフォルダーに入れないようにし、再構築する前にプロジェクトが「クリーン」になっていることを確認してください)

1

それを修正しました!どうやら、新しいXcodeのエラーでした。 OS X/macOSを再起動し、プロジェクトをクリーンアップする必要があります。それはその後動作するはずです!

1

これは、iOS 10、macOS Sierra、watchOS 3、およびtvOS 10で導入されたセキュリティ強化の変更です。

コード署名により、アプリバンドル内のファイルがリソースフォークまたはFinder情報を含む拡張属性を持つことができなくなりました。

このエラーの原因となっているファイルを確認するには、ターミナルで次のコマンドを実行します。

$ xattr -lr

実際のアプリバンドルへのパスに置き換えます。

このコマンドの動作例を次に示します。

$ xattr -lr Foo.app

/Applications/Foo.app:com.Apple.FinderInfo:

00000000 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 | ................ |

Xattrコマンドを使用して、アプリバンドルからすべての拡張属性を削除することもできます。

$ xattr -cr

Finderの[パッケージの内容を表示]コマンドでバンドル内のファイルを参照すると、それらのファイルにFinder情報が追加される場合があります。そうでない場合は、ビルドプロセスを監査して、拡張属性が追加されている場所を確認します。

1