Detecting the use of private APIs

2020-02-09 09:22发布

I'm being rejected on the App Store for using private instance variables in my app. The ivars I am supposedly using are most definitely not being accessed in my code, but I am using one or two static libs from third parties. How would I test whether these could actually be the offenders?

Update:

Apple is accusing me (and 3rd party libs) of using private instance variables in the UITouch class, including

  • _locationInWindow
  • _tapCount
  • _previousLocationInWindow
  • _timestamp
  • _touchFlags
  • _phase
  • _window

4条回答
祖国的老花朵
2楼-- · 2020-02-09 10:01

For those who have many third-party libraries, can check your project in such a manner in your project path, for example if you want to find GraphicsService:

$ find . |grep "\\.a" | xargs grep GraphicsService
查看更多
爷、活的狠高调
3楼-- · 2020-02-09 10:08

I am using one or two static libs from third parties

Contact the third parties, requesting explanation, they wrote the code, they must know what's in there. They might have a forum or a comments section, where other users might have expressed these concerns already, and you can look for answers and alternatives.

查看更多
Luminary・发光体
4楼-- · 2020-02-09 10:19

You can use nm to scan for which library uses the ivar in question.

% nm static_lib.a | grep name_of_ivar

If you get a line, I think with a capital U, with the name of the ivar you probably have a suspect.

查看更多
Fickle 薄情
5楼-- · 2020-02-09 10:25

I don't know anything about detecting the problem, but we encountered this problem recently; in our case it was caused by the Three20 library. If you are using it, see http://groups.google.com/group/three20/browse_thread/thread/c442af6e39a918b0/2375e7a158ee9d1b for a discussion/possible solutions.

查看更多
登录 后发表回答