ฉันจะเขียนแอพ iPhone ทั้งหมดใน JavaScript โดยไม่ทำให้เป็นแค่เว็บแอพได้อย่างไร


84

ฉันไม่ต้องการใช้เวลาในการเรียนรู้ Obj-C ฉันใช้เวลา 7 ปีในการเขียนโปรแกรมเว็บแอปพลิเคชัน ไม่ควรมีวิธีใช้ WebView และเพียงแค่เขียนทั้งแอปในจาวาสคริปต์โดยดึงไฟล์จากทรัพยากรของโครงการโดยตรง

คำตอบ:


71

ฉันพบคำตอบหลังจากค้นหารอบ ๆ นี่คือสิ่งที่ฉันได้ทำ:

  1. สร้างโครงการใหม่ใน XCode ฉันคิดว่าฉันใช้แอพตามมุมมอง

  2. ลากวัตถุ WebView ไปยังอินเทอร์เฟซของคุณและปรับขนาด

  3. ภายใน WebViewController.m ของคุณ (หรือไฟล์ที่มีชื่อคล้ายกันขึ้นอยู่กับชื่อมุมมองของคุณ) ในเมธอด viewDidLoad:

    NSString * filePath = [[NSBundle mainBundle] pathForResource: @ "index" ofType: @ "html"];  
    NSData * htmlData = [NSData dataWithContentsOfFile: filePath];  
    ถ้า (htmlData) {  
      NSBundle * มัด = [NSBundle mainBundle]; 
      NSString * path = [มัด bundlePath];
      NSString * fullPath = [NSBundle pathForResource: @ "index" ofType: @ "html" inDirectory: path];
      [webView loadRequest: [NSURLRequest requestWithURL: [NSURL fileURLWithPath: fullPath]]];
    }
  4. ตอนนี้ไฟล์ใด ๆ ที่คุณเพิ่มเป็นทรัพยากรในโปรเจ็กต์พร้อมใช้งานในเว็บแอปของคุณแล้ว ฉันมีไฟล์ index.html ซึ่งรวมถึง javascript และ css และไฟล์รูปภาพที่ไม่มีปัญหา ข้อ จำกัด เดียวที่ฉันพบจนถึงตอนนี้คือฉันไม่สามารถสร้างโฟลเดอร์ใหม่ได้ดังนั้นไฟล์ทั้งหมดจึงเกะกะโฟลเดอร์ทรัพยากร

  5. เคล็ดลับ: ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มไฟล์เป็นทรัพยากรใน XCode มิฉะนั้นไฟล์จะไม่พร้อมใช้งาน ฉันได้เพิ่มไฟล์เปล่าใน XCode จากนั้นลากไฟล์ของฉันไปด้านบนในตัวค้นหา นั่นได้ผลสำหรับฉัน

หมายเหตุ: ฉันตระหนักดีว่า Obj-C ต้องไม่ยากที่จะเรียนรู้ แต่เนื่องจากฉันมีแอปนี้อยู่แล้วใน JS และฉันรู้ว่ามันใช้งานได้ใน Safari นี่เป็นวงจรการพัฒนาที่เร็วกว่ามากสำหรับฉัน สักวันฉันแน่ใจว่าฉันจะต้องพังทลายและเรียนรู้ Obj-C

แหล่งข้อมูลอื่น ๆ ที่ฉันพบว่ามีประโยชน์:

การเรียก Obj-C จาก javascript: เรียก objective-c จาก javascript

การเรียกใช้จาวาสคริปต์จาก Obj-C: การพัฒนาแอป iphone สำหรับแฮกเกอร์เว็บ

การอ่านไฟล์จากแอปพลิเคชันบันเดิล: uiwebview


ที่น่าสนใจก็คือฉันเพิ่งดูรหัสสำหรับ GitX (แอป MacOS มาตรฐาน) ในสุดสัปดาห์นี้และฉันคิดว่านี่คือสิ่งที่พวกเขาทำเช่นกัน wiki.github.com/pieter/gitx
Pat Notz

1
สำหรับปัญหาความยุ่งเหยิงให้ลองเพิ่มไดเร็กทอรีไปยัง xcode proj ของคุณแล้วเลือก "สร้างการอ้างอิงโฟลเดอร์ ... " แทน "สร้างกลุ่มซ้ำ ... "
Rhythmic Fistman

1
+1. และฉันค่อนข้างมั่นใจว่าคุณสามารถใช้เทคนิคเดียวกันนี้เพื่อสร้างแอปโทรศัพท์ Android ได้ และคาดว่าสมาร์ทโฟนรุ่นอื่น ๆ จะพัฒนาเบราว์เซอร์เพื่อรองรับ Javascript จากนั้นคุณก็สามารถรองรับได้เช่นกัน HTML / CSS / JavaScript ข้ามแพลตฟอร์มคือวิถีแห่งศตวรรษที่ 21 แน่นอนว่าโค้ดเนทีฟเฉพาะแพลตฟอร์มที่ไม่เป็นทางการนั้นล้าสมัยไปนานแล้ว?
MarkJ


7

สำหรับผู้ที่ทำสิ่งนี้บน iPhone 2.1 (อาจจะ 2.0) คุณไม่จำเป็นต้องสร้างบริการพิเศษใด ๆ สำหรับการจัดเก็บข้อมูลในเครื่อง MobileSafari รองรับ API ฐานข้อมูล HTML5 / WHATWG SQL นี่คือ API เดียวกับที่รองรับโดย Safari และ Firefox บนเดสก์ท็อปเวอร์ชันล่าสุด

หากคุณใช้ชุดเครื่องมือเช่น Dojo หรือ ExtJS ที่มีพื้นที่จัดเก็บข้อมูลที่เป็นนามธรรมโค้ดของคุณควรใช้งานได้กับเบราว์เซอร์สมัยใหม่ทั้งหมดรวมถึง MobileSafari

ในการทดสอบให้เปิดhttp://robertsanders.name/dev/stackoverflow/html5.htmlบน iPhone ของคุณ

หากคุณเปิดหน้านั้นจากนั้นดูระบบไฟล์ของ Jailbroken iPhone คุณควรเห็นฐานข้อมูลบางแห่งใน / private / var / mobile / Library / WebKit / Databases / มีไดเรกทอรีของฐานข้อมูลที่เปิดบนเว็บอยู่ที่นั่น

root # sqlite3 /private/var/mobile/Library/WebKit/Databases/Databases.db SQLite เวอร์ชัน 3.5.9 ป้อน ".help" เพื่อดูคำแนะนำ

sqlite> .databases ไฟล์ชื่อ seq


0 หลัก /private/var/mobile/Library/WebKit/Databases/Databases.db

sqlite> .tables

ต้นกำเนิดฐานข้อมูล

sqlite> เลือก * จากฐานข้อมูล;

1 | http_robertsanders.name_0 | NoteTest | ฐานข้อมูล | ตัวอย่าง API | 20000 | 0000000000000001.db

sqlite> เลือก * จาก Origins;

http_robertsanders.name_0 | 5242880


4

คุณสามารถสร้างแอปพลิเคชันโดยไม่ต้องรู้จัก obj-C ใด ๆ เฟรมเวิร์ก QuickConnectiPhone ช่วยให้คุณทำสิ่งนี้ได้ ตรวจสอบhttp://tetontech.wordpress.comสำหรับวิธีการใช้งานและวิธีอื่น ๆ ในการทำสิ่งที่คุณขอ


2

คุณควรให้กระดาษห่อแบบเนทีฟที่เขียนด้วย Objective C กระดาษห่อนี้อาจมีโค้ดไม่กี่บรรทัด (เช่น 10) ที่จำเป็นในการสร้าง WebView และนำทางไปยังที่อยู่ที่ระบุในอินเทอร์เน็ต (ที่แอปพลิเคชันของคุณอยู่) แต่ในกรณีนี้แอปพลิเคชันของคุณควรเป็นเว็บแอปพลิเคชันที่มีคุณสมบัติครบถ้วน (ฉันหมายถึงไม่เพียง แต่ใช้ JavaScript เท่านั้น แต่ยังใช้ HTML สำหรับมาร์กอัปด้วย)


2

ฉันพบปัญหาเดียวกันนี้ ฉันมีเกมที่เขียนด้วย Javascript ทั้งหมดแล้ว ฉันชอบที่จะสร้างเวอร์ชันที่เป็นมิตรกับ iPhone แต่ Obj-C นั้นเกินความจำเป็น สิ่งที่ฉันทำคือใช้ WebView เพื่อชี้ไปที่ url พิเศษของแอพ iphone หลังจากคิดแล้วฉันคิดว่าฉันสามารถย้ายไฟล์เหล่านั้นไปยังไดเร็กทอรีแอพและเรียกใช้ในเครื่องได้


2

ไม่มีวิธีดำเนินการกับ Apple API ปัจจุบัน ทางออกที่ใกล้เคียงที่สุดของคุณคือเขียนแอป iPhone พื้นฐานง่ายๆที่ฝังเว็บเบราว์เซอร์ ซึ่งจะช่วยให้คุณสามารถเรียกดูแอปพลิเคชัน xhtml / js ในเครื่องได้

หากคุณต้องการจัดเก็บข้อมูลคุณจะต้องก้าวไปอีกขั้นและรวมเซิร์ฟเวอร์ http ที่มีน้ำหนักเบาซึ่งเซิร์ฟเวอร์แอปของคุณและให้การโทรเพื่อจัดเก็บและดึงข้อมูล อาจไม่ใช่ทางออกที่ดีสำหรับคุณ แต่อาจใช้งานได้น้อยกว่าแอป Obj-C แบบเต็ม

ดังที่ทราบกันดีว่า Obj-C นั้นค่อนข้างง่ายในการเรียนรู้ มีตัวอย่างมากมายใน SDK ชุมชนมีความเข้มแข็งและจะตอบคำถามได้ดีโดยไม่ลังเล


คุณสามารถใช้ที่จัดเก็บในตัวเครื่องผ่านทาง API ที่เก็บข้อมูล WHATWG / HTML5 SQL สำหรับ JavaScript ดูคำตอบของฉันสำหรับข้อมูลเพิ่มเติม
Robert Sanders

1

ฉันใช้ phonegap มาระยะหนึ่งแล้วและดูเหมือนว่าจะได้ผลลัพธ์ที่ดีที่สุดสำหรับฉัน ฉันจะโพสต์ประสบการณ์ของฉันในอีก 1 สัปดาห์โดยมีลิงก์ไปยังแอปของฉันด้วย


ตอนนี้ได้รับการอนุมัติโดย apple blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval
Neo42

1

นอกจากนี้Titanium Mobileยังเป็นตัวเลือกซึ่งช่วยให้คุณสามารถเขียน JavaScript ที่แปลเป็น Objective-C


แปลเป็น Objective-C จริงหรือ? ฉันคิดว่ามันทำงานในส่วนประกอบของเว็บเบราว์เซอร์เช่น PhoneGap
Jonas

0

อีกอย่างน้อย 2 คนพูดถึง phonegap แต่ฉันคิดว่าจะโพสต์สิ่งนี้ด้วยและพูดถึงว่า Apple ได้อนุมัติกรอบ phonegap แล้ว ดังนั้นตอนนี้คุณจะไม่ถูก Apple ปฏิเสธแอปของคุณเพียงเพราะคุณใช้ phonegap

บล็อกโพสต์เกี่ยวกับ phonegap และ Apple - http://blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval/

Phone Gap Home

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.