我们有一个使用PhoneGap 1.0版创建的旧应用。 绝对没有机会迁移到最新的PhoneGap / Cordova,因为在所需的iOS / JS代码中都有巨大的更改。
尝试上传使用iOS SDK 6.1编译的应用程序失败,并显示消息:“不允许应用程序访问UDID,也不得使用UIDevice的uniqueIdentifier方法。请更新您的应用程序和服务器以将用户与供应商关联或iOS 6中引入的广告标识符。“。
PhoneGap 1.0源代码不公开,它作为编译框架分发。
有没有人知道如何解决这个问题?
答案 0 :(得分:3)
疯狂,但工作解决方案(黑客)
好吧,一旦PhoneGap 1.0作为已编译的lib提供,我们就可以尝试更改已编译的二进制文件。
Apple拒绝的原因是在iOS 6中不推荐使用[UIDevice uniqueIdentifier]方法。如果您的应用程序(JS代码)不使用PhoneGap提供的UDID(实际上,不知道是否有办法获取它),安全(!?请参阅下面的注释)将 uniqueIdentifier 的调用更改为返回UIDevice类的NSString的任何其他方法。
我使用了+(NSString *)systemVersion - systemVersion属性的getter。
所以,获取任何HEX编辑器并打开文件:/users/Shared/PhoneGap/Frameworks/PhoneGap.framework/PhoneGap 将 uniqueIdentifier 替换为 systemVersion \ 0 \ 0 \ 0 。
\ 0 - 是零代码字节,需要对齐3个字节的新名称长度!
重建您的应用,并且......中提琴上传到AppStore成功了!
注意:当然,您必须检查您的应用功能是否已损坏。 我为我的应用做了,它就像一个魅力。
答案 1 :(得分:0)
不。 Apple是你的问题。您必须将PhoneGap更新至至少2.5,请参阅此处发布: https://shazronatadobe.wordpress.com/2013/05/01/cordovaphonegap-and-the-new-apple-app-store-requirements/
你必须更新你写的不使用uuid的任何插件或本地。
答案 2 :(得分:0)
我使用phonegap 1.2.0时遇到了同样的问题,但上面的“hack”对我没用 - 它给了我一个错误
ld: file is universal (3 slices) but does not contain a(n) armv7 slice:
所以我找到了一个更简单的解决方案 - 找到安装phonegap并打开它时安装的PhoneGapLib.xcodeproj,然后搜索“uniqueIdentifier”调用。
然后我使用下面的代码(https://stackoverflow.com/a/9458313/1851746)来替换UUID值 -
- (NSString *)getUUID
{
NSString *UUID = [[NSUserDefaults standardUserDefaults] objectForKey:@"uniqueID"];
if (!UUID)
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
UUID = [(__bridge NSString*)string stringByReplacingOccurrencesOfString:@"-"withString:@""];
[[NSUserDefaults standardUserDefaults] setValue:UUID forKey:@"uniqueID"];
}
return UUID;
}
使用[self getUUID]而不是uniqueIdentifier调用此方法虽然由于某种原因导致错误,但后续值已添加到phonegap版本的字典中。所以我只是在与上面相同的块中硬编码。
然后将目标更改为“PhoneGap”,构建,然后转到Products文件夹并在finder中打开位置,复制框架文件夹,并替换在Users / Shared / PhoneGap / Frameworks中找到的文件夹。
项目应该编译并被App Store接受