该应用程序在 id 中引用了非公开选择器(Facebook SDK iOS)。

43

在使用应用程序加载器提交我的应用程序时,我遇到了这个警告。

The app references non-public selector in MyApp : id

这个警告有可能导致我的应用程序被苹果AppStore的验证拒绝。

我的应用程序正在使用Facebook SDK iOS 3.1.1(也尝试过3.1)。


3
该警告在Facebook iOS SDK 3.8中重新出现(在之前的几个版本中没有这样的警告)。 - Alexander Poleschuk
8个回答

65
这个问题是由Facebook SDK for iOS引起的。
Application Loader禁止使用来自任何FBGraphUser相关类的“id”变量(也许还有其他变量,没有测试)-例如:
id<FBGraphUser> friend
id<FBGraphUserExtraFields>user

自2013年1月以来,Facebook已经知悉了这个问题:Bug Report

目前的解决方法是使用以下方法:

[user objectForKey:@"id"]
[friend objectForKey:@"id"]

在不同的 Facebook 示例中,使用 user.idfriend.id

改为使用其他方式。


3
因为这个原因,该应用程序会被拒绝在应用商店上架吗? - Rahul Singh
1
在我的情况下,应用程序被自动机器人验证器直接明确地拒绝了,我无法将其推送到AppStore。也许今天情况不同了(但我几乎不相信)?不幸的是,这是我的唯一问题。我建议您仔细检查每个Facebook变量/数组是否都使用了ForKey函数。祝你好运! - Kalzem
现在,我已经仔细检查了Facebook ForKey函数的问题。我在我的代码中到处使用Forkey函数。我也读到说这个问题可能是由于某些第三方库的实现而引起的,在我的情况下有3-4个第三方库,即ParseSDK、MixpanelSDK、Reachability、BugsenseSDK、FacebookSDK。这些库中的任何一个都可能是问题所在吗? - Rahul Singh
2
听起来这是一个经常出现的问题。在iOS7之前我没有遇到过。使用最新的FB SDK。更换点符号表示法可以消除错误。 - WCByrne
4
问题在SDK 3.8中。使用user[@"id"]而不是user.id可以消除警告。 - Gabriele Petronella
显示剩余7条评论

3

对于任何新来此处寻找答案的人,有关此问题似乎已在Facebook SDK更改日志中的v3.14.1中修复。

https://developers.facebook.com/docs/ios/change-log-3.x/

  • 为避免应用商店提交警告,类型FBGraphObjectFBGraphPlaceFBOpenGraphActionFBOpenGraphObject上的id属性已被弃用,改用objectID

  • 为避免应用商店提交警告,FBLinkShareParamsFBOpenGraphObject的description属性已被弃用,分别改用linkDescription和objectDescription


3

为了更新搜索引擎中的人,这个问题已经在最新的Facebook SDK中解决了(我们刚刚将项目迁移到3.7.1版本的库,验证警告消失了)。


7
我仍然有这个3.8版本的东西 :S - João Nunes
我在3.9版本中看到了它,但我的状态是“提交并带有验证警告”,正在等待审核。也许苹果会做正确的事情? - JLundell
@JLundell:你的应用程序被苹果接受了吗?我也遇到了同样的问题,正在考虑带着警告提交。 - Akshay Aher
仅供记录,在2014年4月4日发布的3.13.1版本中,该问题仍未得到解决! - Nicolinux

2
Facebook iOS SDK 3.12在FBGraphUser.h中存在相同问题。修改为:
@property (retain, nonatomic) NSString *id;

to

@property (retain, nonatomic) NSString *UserId;

0

验证警告在v3.13中也存在。我不知道这对其他人是否有效,但这是一个快速解决办法,可以消除错误。

在FBGraphUser.h的第41行左右,我进行了以下更改:

@property (retain, nonatomic) NSString *id;

改为

@property (retain, nonatomic) NSString *FBUserID; 

我也收到了有关setProfileId的验证警告,所以我去FBProfilePictureView.h并将第54行和76行的profileID更改为FBID。

然后,我更新了我的游戏ViewController中的FBLoginView信息以反映这些更改。我的应用程序中与FB相关的所有内容似乎仍在正常工作,并且已通过Application Loader验证。


我不建议更改FB的内部,因为当您更新SDK时,您的更改将会被破坏。 - Kalzem

0
我通过从Github(link)下载FacebookSDK源代码并在scripts目录中使用“build_framework.sh”脚本来解决了这个问题(其中13.1仍会生成警告并在itunesconnect中生成无效的二进制文件)。然后将生成的框架添加到我的Xcode项目中,就不再收到警告了。

0
请使用Facebook iOS SDK 3.13,这样就不会出现任何验证警告。

1
不准确。问题在3.13.1版本仍然存在。 - Nicolinux
我使用了v3.13,没有出现任何验证错误。 - Nookaraju

0

文件 FBGraphUser.h

更改

@property (retain, nonatomic) NSString *id;

@property (retain, nonatomic) NSString *FbUserId;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接