Bir iPhone uygulamasını yalnızca bir web uygulaması yapmadan tamamen JavaScript ile nasıl yazabilirim?


84

Obj-C'yi öğrenmek için zaman ayırmak istemiyorum. 7 yıldan fazla süredir web uygulama programlaması yaptım. Web Görünümü'nü kullanmanın ve tüm uygulamayı javascript'te yazmanın, dosyaları doğrudan projenin kaynaklarından çekmenin bir yolu olması gerekmez mi?

Yanıtlar:


71

Cevabı etrafı araştırdıktan sonra buldum. İşte yaptığım şey:

  1. XCode'da yeni bir proje oluşturun. Sanırım görünüm tabanlı uygulamayı kullandım.

  2. Arayüzünüze bir WebView nesnesini sürükleyin ve yeniden boyutlandırın.

  3. ViewDidLoad yönteminde, WebViewController.m (veya görünümünüzün adına bağlı olarak benzer şekilde adlandırılmış dosya) içinde:

    NSString * filePath = [[NSBundle mainBundle] pathForResource: @ "index" ofType: @ "html"];  
    NSData * htmlData = [NSData dataWithContentsOfFile: filePath];  
    if (htmlData) {  
      NSBundle * paketi = [NSBundle mainBundle]; 
      NSString * yol = [paket paketYolu];
      NSString * fullPath = [NSBundle pathForResource: @ "index" ofType: @ "html" inDirectory: yol];
      [webView loadRequest: [NSURLRequest requestWithURL: [NSURL fileURLWithPath: fullPath]]];
    }
  4. Artık projeye kaynak olarak eklediğiniz tüm dosyalar web uygulamanızda kullanılabilir. Hiç sorun olmayan javascript, css ve resim dosyalarını içeren bir index.html dosyam var. Şimdiye kadar bulduğum tek sınırlama, yeni klasörler oluşturamıyorum, bu nedenle tüm dosyalar kaynaklar klasörünü karıştırıyor.

  5. Püf noktası: Dosyayı XCode'da bir kaynak olarak eklediğinizden emin olun, aksi takdirde dosya kullanılamayacaktır. XCode'a boş bir dosya ekledim, ardından dosyamı bulucuda üste sürükledim. Bu benim için çalışıyor.

Not: Obj-C'nin öğrenilmesinin o kadar da zor olmadığının farkındayım. Ancak bu uygulamaya zaten JS'de sahip olduğum ve Safari'de çalıştığını bildiğim için bu benim için çok daha hızlı bir geliştirme döngüsü. Bir gün eminim ki parçalanıp Obj-C'yi öğrenmem gerekecek.

Yararlı bulduğum diğer birkaç kaynak:

JavaScript'ten Obj-C'yi çağırmak : javascript'ten object- c'yi çağırmak

Obj-C'den javascript'i çağırma: Web korsanları için iPhone uygulama geliştirme

Uygulama paketinden dosyaları okuma: uiwebview


Yeterince ilginç bir şekilde, bu hafta sonu GitX'in (standart MacOS uygulaması) koduna bakıyordum ve bence yaptıkları da bu. wiki.github.com/pieter/gitx
Pat Notz

1
Dağınıklık sorunu için, xcode projenize bir dizin eklemeyi ve "Yinelemeli Olarak Gruplar Oluşturun ..." yerine "Klasör Referansları Oluştur ..." seçeneğini seçmeyi deneyin.
Rhythmic Fistman

1
+1. Ve bir Android telefon uygulaması yapmak için aynı tekniği kullanabileceğinizden oldukça eminim. Ve muhtemelen, diğer akıllı telefonlar tarayıcılarını Javascript'i destekleyecek şekilde geliştirecekler ve siz de onları destekleyebilirsiniz. Çapraz platform HTML / CSS / JavaScript 21. yüzyıl yoludur. Şüphesiz, platforma özgü yerel kodun modası uzun zaman önce bitti mi?
MarkJ


7

Bunu iPhone 2.1'de (belki 2.0) yapanlar için, yerel veri depolaması için herhangi bir özel hizmet oluşturmanıza gerek YOKTUR. MobileSafari, HTML5 / WHATWG SQL veritabanı API'sini destekliyor gibi görünüyor. Bu, masaüstü Safari ve Firefox'un son sürümleri tarafından desteklenen API ile aynıdır.

Dojo veya ExtJS gibi bir depolama soyutlaması sunan bir araç seti kullanıyorsanız, kodunuz MobileSafari dahil hemen hemen her modern tarayıcıda çalışmalıdır.

Test etmek için iPhone'unuzda http://robertsanders.name/dev/stackoverflow/html5.html sayfasını açın .

Bu sayfayı açıp Jailbreak'li bir iPhone'un dosya sistemine bakarsanız, / private / var / mobile / Library / WebKit / Databases / içinde bir yerde bir veritabanı görmelisiniz. Orada web'de açılan bir DB dizini bile var.

root # sqlite3 /private/var/mobile/Library/WebKit/Databases/Databases.db SQLite sürüm 3.5.9 Talimatlar için ".help" girin

sqlite> .databases seq name dosyası


0 ana /private/var/mobile/Library/WebKit/Databases/Databases.db

sqlite> .tables

Veritabanları Kökenleri

sqlite> Veritabanlarından * seçin;

1 | http_robertsanders.name_0 | NoteTest | Veritabanı | API örneği | 20000 | 0000000000000001.db

sqlite> Origins'den * seçin;

http_robertsanders.name_0 | 5242880


4

Herhangi bir obj-C bilmeden uygulama oluşturabilirsiniz. QuickConnectiPhone çerçevesi bunu yapmanızı sağlar. Check out http://tetontech.wordpress.com bunu yanı sıra istediler neyi yapmanın başka yolları nasıl kullanılacağı için.


2

Nesne C'de yazılmış yerel sarmalayıcıya sahip olmalısınız. Bu sarmalayıcı, bir Web Görünümü oluşturmak ve internette (uygulamanızın bulunduğu yer) verilen adrese yönlendirmek için gerekli olan gerçekten birkaç satır kod (10 gibi) içerebilir. Ancak bu durumda uygulamanız tam özellikli bir web uygulaması olmalıdır (yani, yalnızca JavaScript'i değil, aynı zamanda işaretleme için biraz HTML kullanın).


2

Ben de aynı problemle karşılaştım. Zaten tamamen Javascript ile yazılmış bir oyunum var. İPhone dostu bir versiyon yapmayı çok isterdim, ancak Obj-C abartı. Yaptığım şey, iphone uygulamasının özel bir url'sini işaret etmek için WebView'ı kullanmaktı. Bunu düşündükten sonra, sanırım bu dosyaları uygulama dizinine taşıyabilir ve yerel olarak çalıştırabilirim.


2

Mevcut apple API'leri ile bunu yapmanın bir yolu yok. En yakın bahsiniz, webkit tarayıcısını yerleştiren basit bir yerel iPhone uygulaması yazmaktır. Bu, xhtml / js uygulamanıza yerel olarak göz atmanıza izin verir.

Verileri depolamak istiyorsanız, bunu bir adım daha ileri götürmeniz ve uygulamanızı sunan ve verileri depolamak ve almak için çağrılar sağlayan hafif bir http sunucusu eklemeniz gerekir. Muhtemelen sizin için ideal bir çözüm değildir, ancak muhtemelen tam bir Obj-C uygulamasından daha az iş gerektirir.

Bir yan not olarak, Obj-C'nin öğrenilmesi oldukça kolaydır. SDK'da tonlarca örnek var. Topluluk güçlüdür ve soruları tereddüt etmeden cevaplayacaktır.


JavaScript için WHATWG / HTML5 SQL depolama API'si aracılığıyla yerel depolamayı kullanabilirsiniz. Daha fazla bilgi için cevabıma bakın.
Robert Sanders


1

Titanium Mobile da bir seçenektir - Objective-C'ye çevrilen JavaScript yazmanıza olanak tanır.


Gerçekten Objective-C'ye çevrildi mi? PhoneGap gibi bir web tarayıcısı bileşeninde çalıştığını düşünüyorum.
Jonas

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.