libspotify 导致 Apple App Store 拒绝

Posted

技术标签:

【中文标题】libspotify 导致 Apple App Store 拒绝【英文标题】:libspotify causing Apple App store rejection 【发布时间】:2013-05-02 06:24:35 【问题描述】:

从 5 月 1 日起,Apple 似乎收紧了应用商店的提交。我有一个使用 Spotify 的应用,并已多次被 App Store 接受。在最近的更新中,该应用因以下原因被拒绝...

非公开 API 使用: 不允许应用访问 UDID,并且不得使用 UIDevice 的 uniqueIdentifier 方法。请更新您的应用和服务器,以将用户与 ios 6 中引入的供应商或广告标识符相关联。

在 libspotify 上执行以下操作

strings libspotify | grep uniqueIdentifier

返回了 3 个 uniqueIdentifier 实例。另一篇帖子指出,这可能是由于 openSSL 而可能与 UDID 无关。但是,Apple 拒绝了该代码。有解决办法吗?

【问题讨论】:

这个问题似乎是题外话,因为它是关于 libspotify 本身的一些错误或问题。更适合将其发布到他们的问题跟踪器等。 【参考方案1】:

这是一个 Cr4zY 快速修复,仅当您真的很着急时才使用(就像我现在一样,Ship or Die!)...

使用 0xED http://www.suavetech.com/0xed/ 之类的工具将libspotify 二进制文件中的uniqueIdentifier 部分更改为uniqueXdentifier 之类的内容。 (注意!必须有相同的长度,否则会变硬!!!)

然后为UIDevice 添加一个类别方法,即在您的项目中像这样(使用与更改为相同的名称)

static NSString *alternativeUniqueIdentifier = nil;

#define DEFAULTS_KEY @"heartbreakridge" // "Improvise, adapt, overcome" - Clint Eastwood in DEFAULTS_KEY

@interface UIDevice (CrazyFix)
- (NSString *)uniqueXdentifier;
@end

@implementation UIDevice (CrazyFix)

- (NSString *)uniqueXdentifier

    if (!alternativeUniqueIdentifier) 
        @synchronized(self) 
            alternativeUniqueIdentifier = [[NSUserDefaults standardUserDefaults] stringForKey:DEFAULTS_KEY];
            if (!alternativeUniqueIdentifier) 
                // XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (capital hex)
                CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
                CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef);
                CFRelease(uuidRef);
                alternativeUniqueIdentifier = [(NSString*)CFBridgingRelease(uuidStringRef) lowercaseString];
                alternativeUniqueIdentifier = [alternativeUniqueIdentifier stringByReplacingOccurrencesOfString:@"-" withString:@""];
                alternativeUniqueIdentifier = [NSString stringWithFormat:@"%@%@", [alternativeUniqueIdentifier substringToIndex:8], alternativeUniqueIdentifier];
                [[NSUserDefaults standardUserDefaults] setValue:alternativeUniqueIdentifier forKey:DEFAULTS_KEY];
                [[NSUserDefaults standardUserDefaults] synchronize];
            
        
    
    return alternativeUniqueIdentifier;


@end

【讨论】:

等不及了,试了一下,看起来效果很好。应用提交即通过扫码。【参考方案2】:

一个热修复已经发布,移除了 uniqueIdentifier 的使用:

http://devnews.spotify.com/2013/05/16/libspotify-12-ios-hot-fix/

【讨论】:

【参考方案3】:

免责声明:我为 Spotify 工作

我们已意识到此问题,并正在努力为 iOS 制作一个热修复程序,以消除对 UDID 访问的需要。坚持住!

编辑:热修复已发布!在http://developer.spotify.com/technologies/libspotify 获取它。 cocoalibspotify 的相应版本即将推出,但同时它可以轻松更改以支持不同版本号的 libspotify。

【讨论】:

这个修复会被合并到 cocoalibspotify 中吗? 您知道何时发布此修复程序吗? 不确定;留意 github 页面或 ping Dan(他是维护者)。在最坏的情况下,请查看下面@epatel 发布的黑客攻击。 @NikReiman 这不是 CocoaLibSpotify 的问题,而是 iOS 的 libspotify 问题。 Daniel 也是 libspotify 的管理员吗?此外,下面的 hack 指出 libspotify 确实使用了 -uniqueIdentifier,这很糟糕。我以为是因为openssl。 热修复已发布!有关详细信息,请参阅开发者页面。

以上是关于libspotify 导致 Apple App Store 拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Apple Cached Service 导致 iPhone app store无法下载程序

Apple内购(IAP)恢复购买产品在网络问题导致超时情况下的处理

Apple内购(IAP)恢复购买产品在网络问题导致超时情况下的处理

Apple内购(IAP)恢复购买产品在网络问题导致超时情况下的处理

Apple ResearchKit 中的额外本地化是不是会导致 iOS App Store 错误地认为我们的应用已针对许多额外语言进行了本地化?

Apple 4.5.4 指南导致应用被拒绝