Three20
是一个非常有名的iPhone开发库,采用Objective-C语言。它是从Facebook iPhone
app衍生而来的,所以很多Facebook app上使用的UI控件,像:TabBar,Launch view,Photo
view等,都能从这个开发库中找到,且它使用的是Apache License(对商业友好),因此很多iPhone开发者都很喜欢使用它。
关于Three20
的介绍及使用,我打算以后再详细说明,今天要说的是最近一件关于App Store开始拒绝那些使用Three20
来开发的app,Apple的说法是:Three20
中引用了一些非public的API,违反了iPhone开发者许可。
此事详细说明可见Three20
邮件列表中的讨论:Heads up: Apple store rejection for apps using three20
那些非public的API如下:
firstResponder
UITouch._locationInWindow
UITouch._phase
UITouch._previousLocationInWindow
UITouch._tapCount
UITouch._timestamp
UITouch._touchFlags
UITouch._view
UITouch._window
我想Three20
使用这些API主要是为了省事,比如firstResponder,而UITouch的这些属性也主要是在Debug的时候才用到。因此拿掉以上这些private API是比较安全的,关键就是如何找到这些API的位置。
因为我的app(购便宜
)也用到了Three20
,所以在发布新版前,为了不被Apple拒掉,必需解决private API的问题,下面我就描述一下我是如何去除这些API的过程:
解决此问题的方法有两个:
方法一(适用SDK3.0以上的app)
:
有一个热心的开发者(uprise78
),在爆出此问题后,根据邮件列表中的讨论以及自己的研究,在github上做了一个fork(three20-P31
),移除了以上所有的private API,所以只需更新此fork即可。
方法二(适用SDK2.x,或自行修改过Three20
的app):
因为Three20
在今年7月份以后就不再兼容SDK2.x,但是我们的app还希望支持2.x的用户,所以我所用的版本就一直很低,没有向上升级。那为了解决此问题,就必须手动移除上面那些API。
在移除之前,我基本扫过了邮件列表中10月底到现在为止所有的文章,发现有两篇文章很重要:
1.发生问题后,作者本人做了一次修改,移除部分private API
2.作者本人并没有完全移除那些private API,uprise78
在作者的基础上又做了一次完整修改,
看起来经过这次修改后,基本解决了此问题。
也就是说只要参考作者及uprise78
的两次修改,就能完整移除所有的private API使用。于是我上github上寻找Three20
的修改历史,发现他们两的修改分别如下:
2009-10-28
作则修改:
c
ommit 8183ae25528bbc575ab41a41227756f06c166240
t
ree 2b2fd7b49fc71755d675eb0fd85c82098da563a5
p
arent e8ecb801ca70ba824846928b7ca75faf376aeedb
2009-10-31
uprise78
修改:
c
ommit 2c03d2b98ddb287ba68ddb628c4a72588bbee79e
t
ree cc3cbfe0b23468d876166881f028a576f4ddcc7b
p
arent 8183ae25528bbc575ab41a41227756f06c166240
c
ommit 3a1f0a9bea92aed27f12a513e1e70c5412ba0f91
t
ree 0da7dba956f71ca57a029dc3a7c88448e76f9942
p
arent 2c03d2b98ddb287ba68ddb628c4a72588bbee79e
在github上比对以上修改后,就能完整移除private API了。
以上所谓移除private API,均是使用#ifdef DEBUG将之包裹,所以要注意以下两点:
1.程序中不能有#define DEBUG
2.在build时,不能在preprocessor marco设置DEBUG
目前方法一已经被证明是可行的,见邮件列表中的讨论:***P31 FORK FIXES REJECTIONS***
而我的app还处于送审review中,必须等审核通过后才能证明方法二有用!
希望上面的信息能帮助使用Three20的iPhone开发者!
from:http://eleda.iteye.com/blog/542302
相关推荐
这个"ThreeJS中文API文档"是为开发者提供的一种详细、易懂的参考资源,旨在帮助他们更好地理解和使用THREE.JS库。以下是对这个API文档中可能包含的一些关键知识点的详细解释: 1. **对象和类**:THREE.JS中的所有...
ThreeJS API文档详细地介绍了库中的各个类、方法和属性,使得开发者能够更容易地理解和使用这个强大的3D库。 ThreeJS的核心概念包括场景(Scene)、相机(Camera)和渲染器(Renderer)。场景是3D世界的基础,其中...
以上就是ThreeJS API中一些核心组件的基本介绍。通过理解并熟练运用这些概念,开发者能够创建出复杂且生动的3D web应用程序。掌握ThreeJS API,不仅可以提升网页的视觉吸引力,还能为用户提供更加沉浸式的交互体验。
Three.js通过简化复杂的WebGL API,使得开发者能够更轻松地构建交互式3D场景。 这篇"Three.js中文文档"提供了对Three.js库的详细解释和示例,对于初学者和有经验的开发者来说都是宝贵的资源。文档通常会包含以下...
在ArcGIS JS API中,我们可以利用其提供的地图服务、图层管理和地理空间操作等功能,与Three.js结合。首先,我们需要在页面中加载ArcGIS API,然后创建一个地图实例,设置其基图和视图。接着,我们可以在地图上添加...
在THREE.js中,API(应用程序接口)是一系列预定义的函数、类和方法,它们允许程序员通过调用这些接口来实现特定的功能。THREE.js的API详细介绍了如何创建和操作3D对象,包括几何体、材质、纹理、光源、相机、渲染器...
在本项目中,开发者利用了ArcGIS JavaScript API和Three.js库来实现一个逼真的下雪特效。这个技术结合了地理信息系统(GIS)与WebGL图形渲染技术,为地图应用增添了生动的视觉效果。以下是关于这些知识点的详细说明...
标题中提到的"不含私有API",意味着这个版本的Three20遵循了Apple的App Store审核指南,没有使用任何未公开的iOS系统接口,因此开发者可以安心地将其整合到自己的应用中,不用担心被App Store拒绝。 描述中提到这是...
Three20最初由Facebook开发,为iOS应用提供了强大的UI组件和网络功能,现在它被引入Android世界,让开发者可以利用类似的API和架构来构建高质量的Android应用。 **Three20的核心特性:** 1. **TTNavigator**: 这是...
4. 在代码中使用 Three20 的 API 创建和配置视图控制器。 **五、示例应用** `Three20 Application` 文件很可能是包含了一个使用 Three20 框架构建的示例应用程序。这个应用可能展示了如何初始化 TTNavigator、创建...
在iOS开发中,Three20是一个非常知名的开源库,由Facebook开发并维护,它提供了一系列强大的UI组件、网络请求处理以及JSON和XML解析功能。本文将详细介绍如何在Xcode4.2环境下配置Three20库。 首先,你需要创建一个...
在IT行业中,Three.js是一个非常流行的JavaScript库,用于在Web浏览器中创建3D图形。而ArcGIS则是Esri公司的一款强大的地理信息系统(GIS),用于处理、分析和展示地理数据。当我们谈论“Three.js与ArcGIS的交互与...
【标题】:“Facebook的Three20库1.0.11版本中的Resource子目录资源” 在iOS应用开发中,Three20是一个广受欢迎的开源UI框架,由Facebook贡献并维护,它极大地扩展了Apple的UIKit框架,提供了丰富的控件、照片...
threejs 中文json包,替换threejs官方的英文json就行了
ArcGIS是Esri公司开发的专业地理信息系统,而Three.js则是一个流行的JavaScript库,用于在浏览器中创建3D图形,特别适合构建交互式的、可视化的网络应用。 首先,ArcGIS提供了丰富的地理数据处理和分析功能,包括...
- 在项目中导入 Three 20 的头文件:`#import <Three20/Three20.h>`。 - 导入 QuartzCore 头文件:`#import <QuartzCore/QuartzCore.h>`。 - 添加一个自定义的样式表类 `SetTextTestStyleSheet.h`,并在 `...
- 在项目中引入 Three20 和 QuartzCore 的头文件:`#import <Three20/Three20.h>` 和 `#import <QuartzCore/QuartzCore.h>`。 - 添加一个测试方法,例如 `labellightlight` 方法,用于测试 Three20 的文本样式功能。...
在Three.js这个强大的WebGL库中,开发3D应用程序时,有时我们需要在场景中显示中文文字。然而,Three.js默认并不支持中文字符,因此需要额外处理。本话题将深入探讨如何利用JSON字体文件来实现Three.js中中文文字的...
在本项目中,"ArcGIS+Three.js实现航迹线效果.zip" 提供了一个结合了 Esri 的 ArcGIS JavaScript API 和 Three.js 库来创建动态航线效果的实例。ArcGIS JavaScript API 是一个强大的地理信息系统(GIS)工具,常用于...