我开始玩Appcelerator Hyperloop了.虽然从第0天开始从JS访问本机API似乎很棒,但它确实引发了一些关于平台架构和性能的问题.
目前(AFAIK)Titanium应用程序具有主UI线程(运行本机UI控制器)和JS线程(运行JS逻辑).从JS到Native的每次调用都通过"Bridge"(这是应用程序中的扩展操作)传递.
此外,Titanium API并未尽可能多地涵盖所有本机API和摘要.但是,如果引入新API,Appcelerator可能需要一段时间才能将这些API实施到平台中.
我最喜欢Titanium的一个方面就是能够扩展它(使用iOS的Objective-c和Android的java) - 允许使用Titanium未涵盖的原生API,并在需要时开发真正的本机性能控件为JS做任何太"沉重"的事情.并且,如上所述,它为每个平台开发了100%原生.
既然Appcelerator引入了Hyperloop我已经完成了一个简单的测试应用程序,并发现Hyperloop没有被翻译成本机代码而只是普通的JS代码:
var UILabel = require('hyperloop/uikit/uilabel');
var label = new UILabel();
label.text = "HELLO WORLD!";
$.index.add(label);
Run Code Online (Sandbox Code Playgroud)
另一件事是你必须在主线程上运行.
因此,就Hyperloop架构而言,我们基本上会想到一些事情:
没有太多关于Hyperloop的文档或文章解释了内部工作 - 所以如果有人有任何答案一直在尝试使用它可能会非常有帮助.
titanium appcelerator appcelerator-titanium appcelerator-hyperloop hyperloop
我试图在我的appcelerator项目中使用Google-Mobile-Ads-SDK,因为ti.admob(https://github.com/appcelerator-modules/ti.admob)似乎不支持奖励广告.所以我在顶部项目目录中创建了一个Podfile:
install! 'cocoapods',
:integrate_targets => false
platform :ios, '7.0'
target 'my app' do
use_frameworks!
pod 'Google-Mobile-Ads-SDK', '7.15'
end
Run Code Online (Sandbox Code Playgroud)
(我无法使用最新版本的pod,Xcode保留了一些类型声明问题 - 这个编译好了.)
然后我使用了这个库,如下所示:
var GADRequest = require('GoogleMobileAds/GADRequest');
var GADRewardBasedVideoAd = require('GoogleMobileAds/GADRewardBasedVideoAd');
var instance = GADRewardBasedVideoAd.sharedInstance();
if (!instance.isReady()) {
var request = new GADRequest();
instance.loadRequest(request, Alloy.CFG.rewardedadid);
}
Run Code Online (Sandbox Code Playgroud)
并且代码失败并出现错误:
TypeError: undefined is not a function
(evaluating 'instance.loadRequest(request, Alloy.CFG.rewardedadid)')
Run Code Online (Sandbox Code Playgroud)
查看相应的生成的.js文件./build/hyperloop/ios/js/googlemobileads/gadrewardbasedvideoad.js,我注意到GADRewardBasedVideoAd.h除了for之外的所有内容都会生成实例方法和属性的函数签名loadRequest().标题条目loadRequest()是:
- (void)loadRequest:(GADRequest *)request withAdUnitID:(NSString *)adUnitID;
Run Code Online (Sandbox Code Playgroud)
与此唯一明显的区别是它使用了一个命名参数.这种方法有什么特别之处吗?我做错了什么或者Hyperloop还没有支持这样的功能吗?
titanium appcelerator appcelerator-titanium appcelerator-hyperloop hyperloop