libspotify导致苹果应用商店被拒绝

libspotify导致苹果应用商店被拒绝,spotify,cocoalibspotify-2.0,libspotify,Spotify,Cocoalibspotify 2.0,Libspotify,从5月1日开始,苹果似乎收紧了应用商店的提交。我有一个使用Spotify的应用程序,并且多次被应用程序商店接受。在最近的一次更新中,该应用被拒绝,原因如下 非公共API使用: 不允许应用访问UDID,并且不得使用UIDevice的uniqueIdentifier方法。请更新您的应用程序和服务器,以将用户与iOS 6中引入的供应商或广告标识符相关联 在libspotify上执行以下操作 strings libspotify | grep uniqueIdentifier 返回了uniqueIde

从5月1日开始,苹果似乎收紧了应用商店的提交。我有一个使用Spotify的应用程序,并且多次被应用程序商店接受。在最近的一次更新中,该应用被拒绝,原因如下

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

在libspotify上执行以下操作

strings libspotify | grep uniqueIdentifier
返回了uniqueIdentifier的3个实例。另一篇文章指出,这可能是由于openSSL,可能与UDID无关。然而,苹果拒绝接受该代码。有解决办法吗?

免责声明:我为Spotify工作

我们已经意识到了这个问题,并正在为iOS制作一个热修复程序,从而消除对UDID访问的需求。抓紧


编辑:热修复程序已退出!抓住它。cocoalibspotify的相应版本即将发布,但与此同时,它可以很容易地更改以支持不同版本的libspotify。

这里有一个Cr4zY快速修复程序,仅在您非常匆忙的情况下使用(就像我现在这样,发货或死亡!)

使用类似0xED的工具将
libspotify
二进制文件中的
uniqueIdentifier
部分更改为类似
uniqueXdentifier
的内容。(注意!必须有相同的长度,否则会断裂!!!)

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


已发布热修复程序,删除uniqueIdentifier的使用:


此修复程序是否会被折叠到cocoalibspotify中?您知道此修复程序何时发布吗?不确定;关注github页面或ping Dan(他是维护者)。在最坏的情况下,请查看下面@epatel发布的黑客信息。@NikReiman这不是CocoaLibSpotify的问题,而是iOS的libspotify。丹尼尔也是libspotify的主持人吗?此外,下面的黑客声明libspotify确实使用了-uniqueIdentifier,这很糟糕。我以为这是因为openssl。热修复程序出局了!有关详细信息,请参阅开发人员页面。无法再等待,尝试了此操作,看起来效果良好。应用程序在提交时通过了代码扫描。这个问题似乎离题了,因为它是关于libspotify本身的一些bug或问题。更适合将其发布到他们的问题追踪器中,等等。
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