问题与应用程序商店的钥匙串和更新
问题描述:
我有一个非常令人沮丧的错误。我已经测试了应用程序升级,首先安装了先前的版本(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
>
UPDATE:
我想我知道是什么问题,就升级,它正在寻找的文件路径为:
/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
,因此它无法找到钥匙扣上 现在的关键在这里就是我如何确定的文件路径:
- (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
答
这不是从你的问题完全清楚,但它听起来像其中的一个构建是一个特设的分布式构建与其他的应用程序商店签名二进制。如果是这种情况,那么这两者将具有不同的钥匙串值。钥匙串链接到两个机制不同的应用程序签名。
啊..我明白了..那么我该如何测试这种情况?我如何使用应用商店签名二进制测试? – xonegirlz 2012-07-07 15:54:47
我做了两件事:我使用ad hoc版本测试升级。这是最简单的。我所做的另一件事是持有批准的开发者版本的二进制文件,然后在发布之前使用促销代码下载它。促销代码不服从开发人员持有。 – smparkes 2012-07-07 15:58:01
所以你说你不会立即发布应用程序,在发布它之前使用促销代码下载它来测试?但是,如何从应用商店获取以前的版本? – xonegirlz 2012-07-07 16:00:04