3

在我的 iphone 应用程序 (iOS7) 提交过程中,我看到了屏幕上显示的错误。基本上,它说我使用了非公共符号__strlcat_chk,strlcpy_chk,我知道strlcat和strlcpy,但不要认为它可能是非公共的。我使用了 Xcode 5。

我也在我的项目中快速搜索了strlcat()和strlcpy(),没看到我用过。应用上传器显示错误屏幕

任何想法可能是什么原因。

[更新] 实际上,在通过我的开发者帐户提交票证后,我从 Apple 获得了更新(我们都有 2 个技术支持与开发者帐户一起提供。)基本上,Apple 支持告诉我这是已知问题。告诉苹果您的应用名称和 ID 号,您的应用将被列入白名单。一旦 Apple 发出 Go 信号,通过提交验证过程就没有问题。

4

2 回答 2

4

原因可以在文件中找到:

iOS 7.0/usr/include/secure/_string.h

导致问题的代码似乎在这里:

#if __has_builtin(__builtin___strlcat_chk) && __HAS_FIXED_CHK_PROTOTYPES #undef strlcat #define strlcat(dest, src, len) \ __builtin___strlcat_chk (dest, src, len, __darwin_obsz (dest)) #endif #endif /* __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 /
#endif /
__DARWIN_C_LEVEL >= __DARWIN_C_FULL */

我不确定这是做什么的,但我猜这是在验证代码时被认为是问题。

您可以将其与同一 _string.h 文件的 iOS 6 版本进行比较,您会发现没有对 strlcat 和 strlcpy 这两个方法的引用。

还有一条带有 rdar 参考的评论:

rdar://problem/12622659

底线:这似乎是 iOS 7.0 SDK 的一个问题,由 Apple 来“修复”它。

更新:

如果您真的想提交您的应用程序,只需编辑 _string.h 文件,编辑#define __HAS_FIXED_CHK_PROTOTYPES 1#define __HAS_FIXED_CHK_PROTOTYPES 0

于 2013-09-16T09:16:27.823 回答
2

我在使用 OpenSSL 的自编译版本时遇到了这个问题。我针对 iOS 6.1 SDK 重新编译了 OpenSSL,将 libssl.a 和 libcrypto.a 添加到我的项目中,然后针对 SDK 7.0 构建/归档了我的应用程序,现在它已经通过了验证。

因此,这似乎是 iOS 7.0 SDK 的问题,但如果您仍然可以访问 6.1 SDK,则此解决方法应该可行。

于 2013-09-20T10:42:15.263 回答