App中的非公共API,__ ttrlcat_chk,__ rtrlcpy_chk

时间:2013-09-15 03:49:14

标签: ios ios7 submission xcode5

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

我也在我的项目中快速搜索strlcat()和strlcpy(),我没有看到我使用它。the app uploader shows the error screen

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

[更新]我通过我的开发者帐户提交了我的机票之后,我实际上得到了Apple的更新(我们都有2个技术支持来自开发者帐户。)基本上,Apple Support告诉我这是已知的问题。告诉苹果您的应用名称和身份证号码,您的应用将被列入白名单。 Apple发出Go信号后,通过提交验证流程没有问题。

2 个答案:

答案 0 :(得分: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://问题/ 12622659

结论:这似乎是iOS 7.0 SDK的一个问题,Apple可以“修复”它。

<强>更新

如果您确实想要提交应用,只需编辑_string.h文件,将#define __HAS_FIXED_CHK_PROTOTYPES 1修改为#define __HAS_FIXED_CHK_PROTOTYPES 0

答案 1 :(得分:2)

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

所以它似乎是iOS 7.0 SDK的一个问题,但是如果你仍然可以访问6.1 SDK,那么这种解决方法应该可行。