0

非常にイライラするエラーが発生しています。最初に以前のバージョン (1.0.1) をインストールしてからバージョン (1.0.2) を実行して、アプリのアップグレードをテストしました。すべてがうまくいきました。アプリを提出しましたが、アップグレード時にクラッシュするという問題が発生しています。1.0.1をインストールしてからアプリストアにバイナリをインストールするという同じことを試してみたところ、クラッシュしました。コンソールとクラッシュログを調べたところ、次のようになりました。

Jul  7 08:07:45 unknown MyApp[1429] <Warning>: KeychainUtils keychainValueForKey: - Error finding keychain value for key. Status code = -25300
Jul  7 08:07:45 unknown MyApp[1429] <Warning>: AccountSession readUserDataFromDisk - Error finding keychain value for key /var/mobile/Applications/997B32E7-6FFC-4696-9CAA-129BADE2FE64/Documents/instagram_json
Jul  7 08:07:45 unknown MyApp[1429] <Warning>: UISegmentedControlStyleBezeled is deprecated. Please use a different style.
Jul  7 08:07:45 unknown MyApp[1429] <Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: username)'
    *** First throw call stack:
    (0x33ee688f 0x367e7259 0x33ee6789 0x33ee67ab 0x33e5368b 0x14fd99 0x152319 0x1530bb 0x170299 0x3270ec59 0x32711817 0x354e7dfb 0x354e7cd0)
Jul  7 08:07:45 unknown UIKitApplication:com.firesnakelabs.pinstagram[0x14e4][1429] <Notice>: terminate called throwing an exception
> 

アップデート:

問題が何であるかはわかっていると思います。アップグレード時に、探していたファイルパスは次の場所にあります。

/var/mobile/Applications/997B32E7-6FFC-4696-9CAA-129BADE2FE64/Documents/instagram_json

アップグレード前 (v1.0.1) のキーチェーンのファイルパスは次のとおりです。

/var/mobile/Applications/CEE344F7-4FE1-4455-BD6D-A4D6EAA4F5FE/Documents/instagram_json

そのため、キーチェーンでキーが見つからないため、filePath を決定する方法は次のとおりです。

- (NSString *)filePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_json", self.identifier]];
    return filePath;
}

最初に見つけた道をたどっています。では、アップグレードの前後、または常にパスを一貫させるにはどうすればよいでしょうか?

私は基本的にファイルパスをキーチェーン名として使用しています:

[attributesDictionary setObject:filePath forKey:(id)kSecAttrAccount]; // Use the key as the account name
4

1 に答える 1

1

あなたの質問からは完全には明らかではありませんが、これらのビルドの 1 つはアドホック分散ビルドで、もう 1 つはアプリ ストアの署名付きバイナリのようです。その場合、2 つのキーチェーン値は異なります。キーチェーンは、2 つのメカニズム間で異なるアプリの署名にリンクされています。

于 2012-07-07T15:51:34.457 に答える