libspotify 导致苹果应用商店拒绝

2023-12-08

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

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

在 libspotify 上执行以下操作

strings libspotify | grep uniqueIdentifier

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


这里有一个Cr4zY快速修复,仅在您非常着急时使用(就像我现在一样,要么船要么死!)...

使用像 0xED 这样的工具http://www.suavetech.com/0xed/改变uniqueIdentifier部分在libspotify二进制到类似的东西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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

libspotify 导致苹果应用商店拒绝 的相关文章

随机推荐

  • Oreo 更新后发生 INSTALL_FAILED_NO_MATCHING_ABIS 错误 [重复]

    这个问题在这里已经有答案了 我实际上正在开发 3 个 Android 应用程序 A B C 在我的所有设备上一切都正常 但是当我将 S7 Edge 更新到 Oreo 时 发生了一些奇怪的事情 2 个应用程序 A B 消失了 我的手机上只剩下
  • 如何获取 Android 设备的当前方向 (ActivityInfo.SCREEN_ORIENTATION_*)?

    我想了解设备的详细方向 最好是其中之一SCREEN ORIENTATION LANDSCAPE SCREEN ORIENTATION PORTRAIT SCREEN ORIENTATION REVERSE LANDSCAPE SCREEN
  • 软漆桶填充:颜色平等

    我正在制作一个小应用程序 孩子们可以用颜色填充预设插图 我已经使用洪水填充算法成功实现了 MS paint 风格的油漆桶 然而 靠近图像元素边缘的像素未填充 因为线条是抗锯齿的 这是因为当前是否填充的条件是colourAtCurrentPi
  • 在 tkinter 中的两个框架之间切换?

    我已经构建了我的前几个脚本 上面有一个漂亮的小 GUI 正如教程所示 但它们都没有解决如何处理更复杂的程序 如果您有一个带有 开始菜单 的东西 用于您的打开屏幕 并且根据用户选择 您移动到程序的不同部分并适当地重绘屏幕 那么执行此操作的优雅
  • AttributeError:“模块”对象没有属性“audio_fadein”

    我已经使用 cx freeze 将 python 项目构建到带有 exe 及其依赖项的单个文件夹中 但是当我运行 exe 时 出现错误 AttributeError module moviepy audio fx all has no at
  • 与 C 语言相比,C++ 有哪些限制? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 以下是C 的好处 C 提供了他们询问的具体功能 他们的 C 编译器几乎肯定是 C 编译器 因此不存在软件成本问题 C 与 C 一样可移植 C 代码可以与 C 一样高效 或者更高 或者更低
  • printf 的参数数量错误会导致奇怪的结果

    include
  • 如何在MySQL中生成数据?

    这是我的 SQL SELECT COUNT id CONCAT YEAR created at MONTH created at DAY created at FROM my table GROUP BY YEAR created at M
  • 如何使用 python 建立 ssh 连接?

    任何人都可以推荐一些在 python 中建立 ssh 连接的东西吗 我需要它与任何操作系统兼容 我已经尝试过 pyssh 只是为了得到 SIGCHLD 错误 我读过这是因为 Windows 缺少这个 我尝试过让 paramiko 工作 但
  • 如果没有活动事务,CreateQuery 无效

    我正在尝试使用 Spring Transactional 注释 但是当该方法时我遇到问题findAll被调用 我有这个错误 org hibernate HibernateException createQuery is not valid
  • C#使用命名空间语句排序

    我想我在某处读到 排序你的 using 语句并删除未使用的语句会带来某种性能优势 但我似乎找不到任何证据或资源来支持这一点 这有什么道理吗 No the using用于设置命名空间的语句没有性能成本 无论语句的顺序如何 生成的 IL 代码都
  • 查找距离 get.shortest.paths() 的路线距离

    我正在使用igraph在 R 中封装来做一些相当简单的事情 计算网络中两个节点之间的最短距离 有没有一种直接的方法来提取通过计算得出的路径的距离get shortest paths 这是一些可重现的代码 说明了我的问题 reproducib
  • Android 2.2 上的振动设置

    我正在制作一个振动切换小部件 事实上 它的第一个版本已经在市场上 但我在 Android 2 2 的振动设置方面遇到了一些问题 直到 Android 2 1 我都没有问题 当我想禁用振动时我会这样做 am setVibrateSetting
  • 如何获取当前 Subversion 内部版本号?

    如何在 Subversion 中自动导入最新的内部版本 修订号 目标是让该数字像 SO 一样在您的网页页脚上可见 让您的构建过程调用svn版本命令 并将其输出嵌入到生成的 source binaries 中 这不仅会给出当前修订版 就像这里
  • agda 程序一定会终止吗?

    有几个地方指出所有 agda 程序都会终止 不过我可以构造一个这样的函数 stall n stall 0 0 stall x stall x 语法荧光笔似乎不喜欢它 但没有编译错误 计算范式stall 0结果是0 计算结果stall 1导致
  • 将 Windows 窗体中的 DataGridView 绑定到列表>

    我有一个格式为 List of List of T 的自定义对象集合 即自定义对象列表的列表 我需要将此集合绑定到Windows窗体中的datagridview控件 并且页面数应等于外部列表中的内部列表的数量 每个页面都应该绑定到内部Lis
  • Sweave 中的自定义图形设备

    My 在Sweave文档中插入带有特殊字符的pdf图形的问题已通过在 Sweave 本身之外创建 pdf 图然后导入它来解决 根据 Sweave 文档 我编写了一个自定义图形设备 它应该以完全相同的方式构建 pdf 图形 然而它不起作用 您
  • javascript 只允许在文本字段中使用字母数字和连字符 - 值

    我有一个文本字段 我正在读取其值 我只想允许字母数字字符和连字符 值 如果我输入 abc d 或 w2w 2 或 we 23 等值 到目前为止我的正则表达式似乎不会触发 var someName document getElementByI
  • 打开新标签页时,Google Chrome 到底会做什么?

    今天 我观察到一个有趣的行为 我使用的是 Windows XP sp3 操作系统 当我在 Google Chrome 中打开新选项卡并查看任务管理器时 会创建一个新进程 但是 一段时间后 这个过程就会终止 为什么它会表现出这样的行为 是不是
  • libspotify 导致苹果应用商店拒绝

    看来 Apple 从 5 月 1 日起收紧了应用程序商店提交 我有一个使用 Spotify 的应用程序 并且已多次被 App Store 接受 在最近的更新中 该应用程序因以下原因被拒绝 非公开API使用 应用程序不允许访问UDID 并且不