1

我们有一个使用 PhoneGap 1.0 版创建的旧应用程序。绝对没有机会迁移到最新的 PhoneGap/Cordova,因为所需的 iOS/JS 代码都发生了巨大变化

尝试上传使用 iOS SDK 6.1 编译的应用程序失败并显示消息:“不允许应用程序访问 UDID,并且不得使用 UIDevice 的 uniqueIdentifier 方法。请更新您的应用程序和服务器以将用户与引入的供应商或广告标识符相关联在 iOS 6 中。”。

PhoneGap 1.0 源代码不公开,它作为编译框架分发。

有谁知道如何解决这个问题?

4

3 回答 3

3

疯狂但有效的解决方案(hack)

好吧,一旦 PhoneGap 1.0 作为编译库提供,我们可以尝试更改编译后的二进制文件本身。

Apple 拒绝的原因是调用 iOS 6 中已弃用的 [UIDevice uniqueIdentifier] 方法。如果您的应用程序(JS 代码)不使用 PhoneGap 提供的 UDID(实际上,不知道有没有办法得到它),它是安全的( !? 请参见下面的注释)将uniqueIdentifier的调用更改为返回 UIDevice 类的 NSString 的任何其他方法。

我使用了 +(NSString *)systemVersion - systemVersion 属性的获取器。

因此,获取任何 HEX 编辑器并打开文件: /users/Shared/PhoneGap/Frameworks/PhoneGap.framework/PhoneGap 将 uniqueIdentifier 替换systemVersion \0\0\0

\0 - 是零代码字节,需要对齐短 3 个字节的新名称的长度!

重建您的应用程序,并且... viola 上传到 AppStore 成功!

注意:当然,您必须检查您的应用程序功能是否损坏。我为我的应用程序做了,它就像一个魅力。

于 2013-09-04T07:15:22.130 回答
0

没有。苹果是你的问题。您必须将您的 PhoneGap 更新到至少 2.5,请参阅此处发布: https ://shazronatadobe.wordpress.com/2013/05/01/cordovaphonegap-and-the-new-apple-app-store-requirements/

而且您必须更新您编写的任何插件或本机以不使用 uuid。

于 2013-09-03T17:26:46.420 回答
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 中打开位置,复制 framework 文件夹,并替换在 Users/Shared/PhoneGap/Frameworks 中找到的那个。

项目应编译并被 App Store 接受

于 2013-10-23T19:12:58.673 回答