A. iOS的jsbridge怎麼做
您好,蘋果手機的系統一旦升級後 是無法進行降級的
B. ios swift用什麼編譯器
使用GNU計劃下面的gcc和g++……不過貌似是Linux平台的,而且不是一步到位,而是先做目標文件再做成可執行的。不過總的來說這種方式顯然更能加強理解,所以是適合新手的學習向編譯器。
也可以直接使用IDE自帶的編譯器,更簡便,也有調試功能。
C. 如何在IOS平台上使用js直接調用OC方法
本例子是為了讓大家能快速開發出OC調用JS功能的一個簡單的例子。
1、准備一個本地化的html網頁,如jsIOS.html
<script type="text/javaScript">
function postStr(){
return document.getElementById("text1").value;
//return "javaScript返回值啦";
}
</script>
2、將此html文件放到項目代碼目錄裡面,如圖:
3、拖一個UIWebView控制項和UIButton控制項到xxxViewController對應的.xib或.storyboard視圖的UIView上;
在xxxViewController的.h文件中分別聲明UIWebView類型變數和UIButton類型的變數,以及一個按鈕點擊事件(並且跟視圖裡面的控制項連線),
並且添加一個UIWebViewDelegate類型的委託。<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA++CjxwIGNsYXNzPQ=="p1">
#import
@interface ViewController : UIViewController
@property(nonatomic,retain) IBOutlet UIWebView *webview;
@property(nonatomic,retain) IBOutlet UIButton *button;
-(IBAction)IOS_JS:(id)sender;
@end
4、在xxxViewController.m文件中實現通過點擊事件,調用javaScript的方法並取得返回值。
代碼如下:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize webview;
- (void)viewDidLoad
{
[super viewDidLoad];
//設置webView
webview.backgroundColor = [UIColor clearColor];
//webview.scalesPageToFit =YES;
webview.delegate =self;
//找到jsIOS.html文件的路徑
NSString *basePath = [[NSBundle mainBundle]bundlePath];
NSString *helpHtmlPath = [basePath :@"jsIOS.html"];
NSURL *url = [NSURL fileURLWithPath:helpHtmlPath];
//載入本地html文件
[webview loadRequest:[NSURLRequest requestWithURL:url]];
}
/*
* 點擊事件
* 調用javaScript的方法postStr()並取得返回值
* 輸出返回值到控制台
*/
-(IBAction)IOS_JS:(id)sender
{
NSString *str = [self.webview :@"postStr();"];
NSLog(@"JS返回值:%@",str);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end
D. 如何在IOS平台上使用js直接調用OC方法
在Cocos2d-JS v3.0 RC2中,與android上js調用Java一樣,Cocos2d-JS也提供了在iOS和Mac上js直接調用Objective-C的方法,示例代碼如下:
var ojb = jsb.reflection.callStaticMethod(className, methodNmae, arg1, arg2, .....);
在jsb.reflection.callStaticMethod方法中,我們通過傳入OC的類名,方法名,參數就可以直接調用OC的靜態方法,並且可以獲得OC方法的返回值。
類
參數中的類名,只需要傳入OC中的類名即可,與Java不同,類名並不需要路徑。比如你在工程底下新建一個類NativeOcClass,只要你將他引入工程,那麼他的類名就是NativeOcClass,你並不需要傳入它的路徑。
import <Foundation/Foundation.h>
@interface NativeOcClass : NSObject
+(BOOL)callNativeUIWithTitle:(NSString *) title andContent:(NSString *)content;
@end
方法
js到OC的反射僅支持OC中類的靜態方法。
方法名比較要需要注意,我們需要傳入完整的方法名,特別是當某個方法帶有參數的時候,你需要將他的:也帶上。根據上面的例子。此時的方法名字是callNativeUIWithTitle:andContent:,不要漏掉了他們之間的:。
如果是沒有參數的函數,那麼他就不需要:,如下代碼,他的方法名是callNativeWithReturnString,由於沒有參數,他不需要:,跟OC的method寫法一致。
+(NSString *)callNativeWithReturnString;
使用示例
下面的示例代碼將調用上面NativeOcClass的方法,在js層我們只需要這樣調用:
var ret = jsb.reflection.callStaticMethod("NativeOcClass",
"callNativeUIWithTitle:andContent:",
"cocos2d-js",
"Yes! you call a Native UI from Reflection");
這里是這個方法在OC的實現,可以看到是彈出一個native的對話框。並把title和content設置成你傳入的參數,並返回一個boolean類型的返回值。
+(BOOL)callNativeUIWithTitle:(NSString *) title andContent:(NSString *)content{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title message:content delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
[alertView show];
return true;
}
此時,你就可以在ret中接受到從OC傳回的返回值(true)了。
注意
在OC的實現中,如果方法的參數需要使用float、int、bool的,請使用如下類型進行轉換:
float,int 請使用NSNumber類型
bool請使用BOOL類型。
例如下面代碼,我們傳入2個浮點數,然後計算他們的合並返回,我們使用NSNumber而不是int、float去作為參數類型。
+(float) addTwoNumber:(NSNumber *)num1 and:(NSNumber *)num2{
float result = [num1 floatValue]+[num2 floatValue];
return result;
}
目前參數和返回值支持 int, float, bool, string,其餘的類型暫時不支持。
E. 如何在IOS平台上使用js直接調用OC方法
在Cocos2d-JS v3.0 RC2中,與Android上js調用Java一樣,Cocos2d-JS也提供了在iOS和Mac上js直接調用Objective-C的方法,示例代碼如下:
1 var ojb = jsb.reflection.callStaticMethod(className, methodNmae, arg1, arg2, .....);
在 jsb.reflection.callStaticMethod 方法中,我們通過傳入OC的類名,方法名,參數就可以直接調用OC的靜態方法,並且可以獲得OC方法的返回值。
類
•參數中的類名,只需要傳入OC中的類名即可,與Java不同,類名並不需要路徑。比如你在工程底下新建一個類 NativeOcClass ,只要你將他引入工程,那麼他的類名就是 NativeOcClass ,你並不需要傳入它的路徑。
1 import <Foundation/Foundation.h> @interface NativeOcClass : NSObject +( BOOL )callNativeUIWithTitle:(NSString *) title andContent:(NSString *)content; @end
方法
•js到OC的反射僅支持OC中類的靜態方法。
•方法名比較要需要注意,我們需要傳入完整的方法名,特別是當某個方法帶有參數的時候,你需要將他的:也帶上。根據上面的例子。此時的方法名字是callNativeUIWithTitle:andContent:,不要漏掉了他們之間的:。
•如果是沒有參數的函數,那麼他就不需要:,如下代碼,他的方法名是 callNativeWithReturnString ,由於沒有參數,他不需要:,跟OC的method寫法一致。
1 +(NSString *)callNativeWithReturnString;
使用示例
•下面的示例代碼將調用上面 NativeOcClass 的方法,在js層我們只需要這樣調用:
1234 var ret = jsb.reflection.callStaticMethod( "NativeOcClass" , "callNativeUIWithTitle:andContent:" , "cocos2d-js" , "Yes! you call a Native UI from Reflection" );
•這里是這個方法在OC的實現,可以看到是彈出一個native的對話框。並把 title 和 content 設置成你傳入的參數,並返回一個boolean類型的返回值。
123 +( BOOL )callNativeUIWithTitle:(NSString *) title andContent:(NSString *)content{ UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title message:content delegate:self cancelButtonTitle:@ "Cancel" otherButtonTitles:@ "OK" , nil]; [alertView show]; return true ; }
•此時,你就可以在 ret 中接受到從OC傳回的返回值(true)了。
注意
在OC的實現中,如果方法的參數需要使用float、int、bool的,請使用如下類型進行轉換:
•float,int 請使用NSNumber類型
•bool請使用BOOL類型。
•例如下面代碼,我們傳入2個浮點數,然後計算他們的合並返回,我們使用NSNumber而不是int、float去作為參數類型。
1 +( float ) addTwoNumber:(NSNumber *)num1 and:(NSNumber *)num2{ float result = [num1 floatValue]+[num2 floatValue]; return result;}
•目前參數和返回值支持 int, float, bool, string,其餘的類型暫時不支持。
F. 能把js打包給安卓和ios調用嗎
能的。安卓和ios可以用js進行調試的,因為js是屬於通用的計算機程序語言,在調用速度上JS省掉了編譯的步驟,執行過程更輕量速度更快。所以能把js打包給安卓和ios調用。
G. 蘋果手機上有什麼軟體可以進行編程的嗎
沒越獄放棄吧, 蘋果不允許任何第三方app能夠有編碼功能。不過還是可以實現的:
1.js python等有雲編譯器, 可以在網頁上寫代碼,運行。 docker什麼的很好用。
2. 越獄, 可以裝gcc什麼的, 還可以用terminal
H. 如何用js調用ios
基本流程:
先看一下Web中,我們給h1標簽添加一個onclick事件,讓它在被點擊之後,修改當前的url。
Web中的HTML代碼:
<html>
<head>
<script>
function getInfo(name)
{
window.location = "/getInfo/"+name;
}
</script>
</head>
<body>
<h1 onclick="getInfo('why')">Name</h1>
</body>
</html>
iOS中,先拖拽WebView,訪問localhost,然後通過WebView的委託事件監聽url跳轉操作,並且把跳轉截取下來。
也就是說,在onclick的時候,普通瀏覽器灰跳轉到那個url,但是在iOS的這個WebView裡面,這個跳轉會被攔截,
用這種方式可以巧妙地實現JS調用iOS的原生代碼:
//
// DWViewController.m
// DareWayApp
//
// Created by why on 14-6-3.
// Copyright (c) 2014年 DareWay. All rights reserved.
//
#import "DWViewController.h"
@interface DWViewController ()
@property (weak, nonatomic) IBOutlet UIWebView *myWebview; // 主頁面
@end
@implementation DWViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 適配iOS6的狀態欄
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
_myWebview.frame = CGRectMake(0,20,self.view.frame.size.width,self.view.frame.size.height-20);
}
// 載入制定的URL
NSURL *url =[NSURL URLWithString:@"http://localhost"];
NSURLRequest *request =[NSURLRequest requestWithURL:url];
[_myWebview setDelegate:self];
[_myWebview loadRequest:request];
}
// 網頁中的每一個請求都會被觸發
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
// 每次跳轉時候判斷URL
if([request.mainDocumentURL.relativePath isEqualToString:@"/getInfo/why"])
{
NSLog(@"why");
return NO;
}
return YES;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
I. iOS上有什麼軟體可以做web前端開發,編譯HTML、CSS和JavaScript
vs code已經支持ios可以直接安裝使用。
J. 如何在iOS和Android上選擇一個JavaScript 引擎進行應用開發
這是個比較專業的問題
首先我推薦一個:react native,facebook推出的一個跨平台解決方案,去年推出了iOS版,手機淘寶的有一個模塊「猜你喜歡」就是用react native實現的,效果還不錯,另外今年9月份,facebook推出了android版,大家不妨試一下,這里針對於webapp,做了一個比對:
相對於Webapp的優勢:
不用Webview,徹底擺脫了Webview讓人不爽的交互和性能問題;
有較強的擴展性,這是因為Native端提供的是基本控制項,JS可以自由組合使用;
可以直接使用Native原生的「牛逼」動畫(在FB Group這個app裡面,面板滑出帶一點果凍彈動,面板基於某個點展開這種動畫隨處可見,這種動畫用Native code來做小菜一碟,但是用Web來做就難上加難)。
相對於Native app的優勢:
可以通過服務端遠程更新JS,進而直接更新app的頁面;
相對於Webapp和Native的劣勢:
擴展性仍然遠遠不如web,也遠遠不如直接寫Native code;
從Native到Web,要做很多概念轉換,勢必造成雙方都要妥協。最終web要用一套CSS的閹割版,Native要費勁地把這個閹割版轉換成native原生的表達方式(比如iOS的Constraint\origin\Center等屬性)。
另外我以前在CocoaChina上收藏過的一個帖子,整理了許多iOS和Android跨平台解決方案,感覺很不錯,現在拿出來分享給大家,希望對題主有幫助。
1、jQuery Mobile
jQuery Mobile是jQuery 在手機上和平板設備上的版本。jQuery Mobile 不僅會給主流移動平台帶來jQuery核心庫,而且會發布一個完整統一的jQuery移動UI框架。支持全球主流的移動平台。jQuery Mobile文檔比較全面,同時有在線工具幫你快速創建自己中意的UI風格。
技術需求:HTML,CSS,jQuery
平台支持: 絕大多數移動瀏覽器
2、Corona SDK(使用Lua語言):
Corona SDK的優點:
穩定;支持硬體加速、GPS、指南針及照相機等;支持與Map、Facebook、OpenFient、GameCenter的集成;內建的物理集成;Lua語言比較容易學習;
已經有了一些很不錯的應用,至少能夠證明這個SDK是可以做出優秀應用來的;不錯的社區支持。
Corona SDK不太好的地方:
只支持iOS和Android;Lua語言不是面向對象的;每年都要交授權費(99美元/年)。
另外還有其他的一些補充,比如:
對於Corona SDK不支持的第三方SDK沒法自己去集成;編譯項目的時候需要把代碼上傳到Corona的伺服器上去編譯,不能在本地直接編譯;無法擴展Corona的功能;物理模塊還有一些缺陷。
3、Airplay SDK(後來更名為Marmalade,不少大的公司在使用Airplay SDK,尤其適用於進行2D/3D游戲的開發)
目前使用Marmalade的游戲有《割繩子》、《植物大戰僵屍》、《你猜我畫》、Build 'n' Bash 3D、Catch the Monkey、Need for Speed Shift以及WorkSnug Pro等多款游戲。
Airplay SDK文檔中還包含多個示例。「感覺受到限制」的開發者還可以在Airplay SDK上進行擴展。開發者需要對C++比較熟悉。
4、Appcelerator(Titanium)
Appcelerator允許使用HTML/Javascript來開發原生app,開發者可以免費使用。目前世界上185個國家中有超多46萬的開發者在使用Appcelerator提供的解決方案。
Titanium為Appcelerator於2008年底所推出的跨平台應用程序開發解決方案,目前支持iOS/Android/Blackberry/WM7等行動平台,以及Windows/Linux/OS X這三種主流的桌上型平台。