我做了一些搜索,发现如果想调整亮度,我需要使用私有框架,苹果会拒绝它。
如果我只想获得亮度值(只需要显示该值而不是调整它),苹果会采用哪种方式接受?
答案 0 :(得分:1)
使用公共框架的未记录的API并不一定是坏事。我认识很多人,包括我自己在这里和那里使用未记录的方法,例如检查连接或向UIAlertViews添加文本字段。
另一方面,链接到私有框架要差得多,因为它们往往非常不稳定,可能会从3.0中删除或重命名。
我不确定您案例的具体情况,但公共框架的私有框架或未记录的API之间的区别非常重要。
答案 1 :(得分:1)
没有办法回答“Apple会允许吗?”的问题。您必须选择风险承受能力并提交。就个人而言,我远离那些没有证件的东西。但是,如果我使用边缘的东西来增强我的程序(通常是非实际上没有文档的未记录的东西),我会尝试让我的程序适应变化。
执行此操作的一个主要方法是检查您要链接到的内容或即将调用的功能是否存在。对于方法,您可以在调用之前使用-respondsToSelector:
。对于函数,您可以测试函数是否存在:
extern void SomeFunction() __attribute__((weak_import));
if (SomeFunction != NULL) {
SomeFunction();
}
(你需要在iPhone上进行测试;我在Mac上使用它,weak_import
应该是可移动的,因为iPhone使用GCC4。请参阅Ensuring Backward Compatibility。到目前为止,我一直都是能够找到一些技巧,以避免在iPhone上实际需要这个。)
所有这一切的关键是确保您的程序功能没有未记录的功能。这样,即使苹果拒绝它,把它拉出来也是微不足道的。
那就是说,对我而言,这是我花费大量时间以文档化的方式进行的事情的最后手段,对于能够显着改善用户体验的事情,并且不违反Apple的基本原则意图。例如,在后台运行,即使你可以让它工作,也明显违反了Apple规则的精神;其他的东西都是私有的,因为它们没有公开,比如UI元素的内部视图。
以一种在应用程序外持续存在的方式更改屏幕亮度似乎违反了基本的游戏规则(留在沙盒中)。获得当前的屏幕亮度听起来并不像那样(虽然我不确定你会用它做什么。)