`
eleda
  • 浏览: 28647 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

如何移除Three20中private API

阅读更多

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 作则修改:

commit  8183ae25528bbc575ab41a41227756f06c166240

tree    2b2fd7b49fc71755d675eb0fd85c82098da563a5
parent  e8ecb801ca70ba824846928b7ca75faf376aeedb

2009-10-31 uprise78 修改:

commit  2c03d2b98ddb287ba68ddb628c4a72588bbee79e

tree    cc3cbfe0b23468d876166881f028a576f4ddcc7b

parent  8183ae25528bbc575ab41a41227756f06c166240

 

commit  3a1f0a9bea92aed27f12a513e1e70c5412ba0f91

tree    0da7dba956f71ca57a029dc3a7c88448e76f9942
parent  2c03d2b98ddb287ba68ddb628c4a72588bbee79e

在github上比对以上修改后,就能完整移除private API了。

 

以上所谓移除private API,均是使用#ifdef DEBUG将之包裹,所以要注意以下两点:

1.程序中不能有#define DEBUG

2.在build时,不能在preprocessor marco设置DEBUG

 

目前方法一已经被证明是可行的,见邮件列表中的讨论:***P31 FORK FIXES REJECTIONS***

而我的app还处于送审review中,必须等审核通过后才能证明方法二有用!

 

希望上面的信息能帮助使用Three20的iPhone开发者!

 

2009-12-08更新:

我的app已经通过Apple审核,证明方法二可用!

(顺便赞一下Apple,这次审核前后才花3天,效率不错.)

2
0
分享到:
评论

相关推荐

    ThreeJS中文API文档

    这个"ThreeJS中文API文档"是为开发者提供的一种详细、易懂的参考资源,旨在帮助他们更好地理解和使用THREE.JS库。以下是对这个API文档中可能包含的一些关键知识点的详细解释: 1. **对象和类**:THREE.JS中的所有...

    ThreeJS-Notes-doc中文api.zip

    ThreeJS API文档详细地介绍了库中的各个类、方法和属性,使得开发者能够更容易地理解和使用这个强大的3D库。 ThreeJS的核心概念包括场景(Scene)、相机(Camera)和渲染器(Renderer)。场景是3D世界的基础,其中...

    ThreeJSAPI文档(中文)

    以上就是ThreeJS API中一些核心组件的基本介绍。通过理解并熟练运用这些概念,开发者能够创建出复杂且生动的3D web应用程序。掌握ThreeJS API,不仅可以提升网页的视觉吸引力,还能为用户提供更加沉浸式的交互体验。

    ThreeJS中文文档

    Three.js通过简化复杂的WebGL API,使得开发者能够更轻松地构建交互式3D场景。 这篇"Three.js中文文档"提供了对Three.js库的详细解释和示例,对于初学者和有经验的开发者来说都是宝贵的资源。文档通常会包含以下...

    基于three.js 和ArcGIS JS API meshline

    在ArcGIS JS API中,我们可以利用其提供的地图服务、图层管理和地理空间操作等功能,与Three.js结合。首先,我们需要在页面中加载ArcGIS API,然后创建一个地图实例,设置其基图和视图。接着,我们可以在地图上添加...

    THREE.js英文API参考教程

    在THREE.js中,API(应用程序接口)是一系列预定义的函数、类和方法,它们允许程序员通过调用这些接口来实现特定的功能。THREE.js的API详细介绍了如何创建和操作3D对象,包括几何体、材质、纹理、光源、相机、渲染器...

    ArcGIS JS API+Three.js实现下雪特效.zip

    在本项目中,开发者利用了ArcGIS JavaScript API和Three.js库来实现一个逼真的下雪特效。这个技术结合了地理信息系统(GIS)与WebGL图形渲染技术,为地图应用增添了生动的视觉效果。以下是关于这些知识点的详细说明...

    three20库,不含私有api

    标题中提到的"不含私有API",意味着这个版本的Three20遵循了Apple的App Store审核指南,没有使用任何未公开的iOS系统接口,因此开发者可以安心地将其整合到自己的应用中,不用担心被App Store拒绝。 描述中提到这是...

    android three20

    Three20最初由Facebook开发,为iOS应用提供了强大的UI组件和网络功能,现在它被引入Android世界,让开发者可以利用类似的API和架构来构建高质量的Android应用。 **Three20的核心特性:** 1. **TTNavigator**: 这是...

    Three20 教程和模板

    4. 在代码中使用 Three20 的 API 创建和配置视图控制器。 **五、示例应用** `Three20 Application` 文件很可能是包含了一个使用 Three20 框架构建的示例应用程序。这个应用可能展示了如何初始化 TTNavigator、创建...

    Xcode配置three20详细图文步骤

    在iOS开发中,Three20是一个非常知名的开源库,由Facebook开发并维护,它提供了一系列强大的UI组件、网络请求处理以及JSON和XML解析功能。本文将详细介绍如何在Xcode4.2环境下配置Three20库。 首先,你需要创建一个...

    Three.js与arcgis的交互与渲染

    在IT行业中,Three.js是一个非常流行的JavaScript库,用于在Web浏览器中创建3D图形。而ArcGIS则是Esri公司的一款强大的地理信息系统(GIS),用于处理、分析和展示地理数据。当我们谈论“Three.js与ArcGIS的交互与...

    arcgis结合 three js 实现动态管网效果

    ArcGIS是Esri公司开发的专业地理信息系统,而Three.js则是一个流行的JavaScript库,用于在浏览器中创建3D图形,特别适合构建交互式的、可视化的网络应用。 首先,ArcGIS提供了丰富的地理数据处理和分析功能,包括...

    facebook-three20-1.0.11-Resource_2

    【标题】:“Facebook的Three20库1.0.11版本中的Resource子目录资源” 在iOS应用开发中,Three20是一个广受欢迎的开源UI框架,由Facebook贡献并维护,它极大地扩展了Apple的UIKit框架,提供了丰富的控件、照片...

    threejs 中文json

    threejs 中文json包,替换threejs官方的英文json就行了

    Three 20 的配置

    - 在项目中导入 Three 20 的头文件:`#import <Three20/Three20.h>`。 - 导入 QuartzCore 头文件:`#import <QuartzCore/QuartzCore.h>`。 - 添加一个自定义的样式表类 `SetTextTestStyleSheet.h`,并在 `...

    three20 图文教程

    - 在项目中引入 Three20 和 QuartzCore 的头文件:`#import <Three20/Three20.h>` 和 `#import <QuartzCore/QuartzCore.h>`。 - 添加一个测试方法,例如 `labellightlight` 方法,用于测试 Three20 的文本样式功能。...

    threejs 显示中文需要的字体包json

    在Three.js这个强大的WebGL库中,开发3D应用程序时,有时我们需要在场景中显示中文文字。然而,Three.js默认并不支持中文字符,因此需要额外处理。本话题将深入探讨如何利用JSON字体文件来实现Three.js中中文文字的...

    ArcGIS+Three.js实现航迹线效果.zip

    在本项目中,"ArcGIS+Three.js实现航迹线效果.zip" 提供了一个结合了 Esri 的 ArcGIS JavaScript API 和 Three.js 库来创建动态航线效果的实例。ArcGIS JavaScript API 是一个强大的地理信息系统(GIS)工具,常用于...

Global site tag (gtag.js) - Google Analytics