1. iphone 的開發過程是怎樣的
其實這個問題在Steve Jobs那本書裡面有, Chapter 36 <The iPhone>. 下面是我個人的總結和翻譯(裡面還附帶我讀完覺得比較有感觸的地方):
05年的時候,iPod銷售火熱.Steve已經開始思考什麼競爭產品可能搶走他們的市場份額.他察覺到了手機: 首先手機幾乎是每個人必須的,另外人們可以通過在手機中整合音樂播放來和iPod競爭,另外手機還可以其他更加豐富的功能:比如攝像頭. 於是Jobs也決定做Apple自己的手機. 所以,總結起來,其目的就是防止其iPod產品被其他公司的手機所取代,另外因為手機幾乎人人需要,這會是一個巨大無比的市場.
另外做的過程當中一些細節的事情很值得讓人尋味:
1. 最開始,Jobs和Motorola合作,在他們的手機RAZR裡面加入iPod功能,取名ROZR.但是Jobs用完後覺得是一坨屎,於是放棄合作,決定全部自己來做;
2. 在iPhone之前,iPad項目就在秘密進行中,原計劃就想在平板電腦上面支持multi-touch.但是後來Jobs覺得這一技術可以先用於iPhone,於是將Tablet的計劃暫時停掉,轉戰iPhone. 他們先秘密收購了 FingerWorks,拿到所有專利,並將其整合到iPhone中來.
3. 開發iPhone的過程是Apple內部兩個團隊互相競爭. 一隊人嘗試將之前的iPod轉成手機,使用轉輪來控制.其優點是菜單選擇和音樂功能操作非常便利,但是字母輸入成為重大弊端; 另一隊人採用平板上面的技術,做一個用multi-touch的方式來操作的手機. 前一個項目取名P1, 後一個取名P2, 最後眾所周知P2取得勝利. 最終成為2007發布的第一代iPhone. 而第一隊人馬成為悲劇角色.
4. iPhone開始打算採用塑料屏幕,但是Jobs覺得要打造一個夠酷的手機,應該使用其他更優質更炫的材料,於是他們最後決定用玻璃. Jobs主動去聯系當時著名的廠商: Corning Glass, 並詳細闡述了Apple對玻璃的要求(Gorilla Glass). Apple的要求之高,使得Corning的CEO Weeks害怕他們不能按時交付產品. Jobs忽悠+鼓勵, 最後Corning 6個月內就完成了交付.
5. Jobs對其Design團隊要求非常苛刻. 而且有時會在產品開發到後期的時候推翻之前的design而從頭再來. Jobs對iPhone的細節就達到了吹毛求疵的程度. 傳記裡面說:"Jobs一夜沒睡,第二天召集Jony Ive說他覺得現行的iPhone太"masculine, task-driven, efficient" (傳記裡面的原話), 於是要求Ive的團隊打翻重做." 於是他們又花了幾周時間,得到iPhone一代最終的樣式. 為了這個design的修改,最後電路結構,天線還有電池位置都要更改. 而裡面的員工回憶說:"要是其他公司,可能就直接發布之前的版本.但是Apple不一樣,我們按下reset鍵,從頭做起".
從上面可以看到Jobs和Apple一直保持著的其他公司難以企及的風格:
1. 對產品的外形設計,硬體配置和軟體技術有著強勢的控制力,同時勇於創新;
2. 對產品要求非常苛刻,有一絲不達標,不惜打翻重做;即使是硬體的具體材質,他們都會嚴格控制.
3. iPhone的開發採用了公司內兩隊競爭的方式.(我不知道是不是每個產品都這樣,我覺得應該不是.不過好像聽說微軟喜歡採用兩隊競爭的形式);
4. 強有力的執行力.
另外我也推薦這篇回答: http://www.quora.com/Apple-Inc-2/How-does-Apple-keep-secrets-so-well
裡面說了Intel Macbook是如何被Jobs提到公司議程上面來的. 感覺很多時候,Apple (以及Steve Jobs)的辦事非常迅速,經常是說干就干, 竟讓我覺得有點像是一個創業期的小公司.
2. 只要一個 iPad,手把手教你給 iPhone 開發應用
科技 是一種人文素養,我認為 Swift Playgrounds App 的核心定位正是如此。
未來世界創新、創業、創造的大門,需要我們用一種有著人文溫度的方式去開啟。
我自己從初中開始看矽谷三大春晚——Apple WWDC 開發者大會、谷歌I/O 大會、微軟Build 大會;在高中的時候,雖然身為文科生,但是開始了裝「黑蘋果」、自學編程的神秘煉金術之旅。Swift 因此成了我的計算機語言母語,而大學時期也很幸運地入選了 WWDC18 獎學金計劃,能夠帶著我們團隊自己開發的 App 見到了庫克。我們後來休學創業,拿了幾輪融資,至今還在這個波詭雲譎卻充滿魔力的創業場拼搏。
這些過去的經歷,都成了喬布斯所說的「connecting the dots」的一部分。我和一家做少兒素質與編程教育的機構也有著不少的合作,也帶過幾支天才少年隊伍,看著他們忘我地投入,看著他們迸發著顛覆性創造力的光芒。
由 Apple 推出的編程工具 Swift Playgrounds 近期推出了 4.0 大版本,我使用它開發了一個簡單的疫情數據看板 App,並以此作為一次簡單的體驗,將過程中的思考和體悟和大家分享。
我們為何學習編程、如何學習創造,Apple 給了我們他們的思考。雖然 Swift Playgrounds 現在還充滿了各者培種瑕疵,但我們也看到了全新的可能:AR、AI、感測器、多維交互、物聯網,這些前沿的技術,以及伴隨其中的人文主義光輝,都能夠在這個小小的設備中,經由每一個開發者的研磨,如同坩堝一般,煉就出自己的結晶。
讓我們開始吧。
註:本文中所有新冠疫情數據來自 騰訊開放平台數據介面,僅用作產品功能效果演示,不具有任何防疫相關參考價值,新冠疫情准確數據,請查閱官方數據平台。
在 Swift Playgrounds 中寫一個疫情數據 App,整個體驗充滿了驚喜與迷思,總之情緒如同一杯馥郁的咖啡,濃烈喚襪而復雜。
我一直在用一台 2017 年的 10.5 英寸玫瑰金 iPad Pro,它伴隨了我的整個大學到現在創業的時光。它曾陪伴著我去過 WWDC18 面對面見過庫克(沒錯)。然而自從升級 iOS 14 以來,我開始對其體和嫌激驗心生不滿,尤其是 Swift Playgrounds 在更新 4.0 大版本前的頻頻閃退和卡頓問題著實讓我頭大。
雖然我從朋友那裡搞來了一台 12.9 英寸的全面屏 iPad Pro,但由於種種原因沒有升級到 Swift Playgrounds 開發 App 所需的 iPadOS 15.2 的環境,於是最終還是投奔到了自己的陳年舊相識的懷抱。
好在 Swift Playgrounds 4.0 對系統兼容性與性能的優化,讓我瞬間覺得「爺青回」。我嘗試了直接在 iPad 上觸屏、觸屏 + 鍵盤、觸屏 + 鍵盤 + Magic Trackpad 的體驗,確實覺得如果沒有一套像樣的鍵鼠方案做配合,效率依然會大打折扣。
由於 macOS Monterey 12.1 依然沒有開放 Universal Control 通用控制功能,我最終選擇將 iPad 畫面投屏到 Mac 的顯示器上。
作為一個簡單的嘗試,我打算寫一個實時展示疫情數據的看板 App。
SwiftUI 配合 iPad 的屏幕操作邏輯,可以說很大程度降低了 UI 部分開發的復雜度,右側的 App 預覽響應迅速,提供了所見即所得的及時反饋。
左側的代碼窗口也新增了 Xcode 樣式的自動補全,在多數情況運轉良好,然而也會在不少場合耍個脾氣,考一考你「默寫」代碼的能力。當然我期待這些問題能夠盡快在後續版本中得到改善。
我們也可以直接編譯代碼,Swift Playgrounds 則會開啟一個新窗口來運行應用,日誌則均可通過自帶的控制台輸出。
Swift Playgrounds 可以像在 Xcode 編輯 .plist 文件一樣,為應用增加系統級能力支持。而同時,Swift Playgrounds 也允許開發者使用 Swift 包管理器來在線獲取第三方模塊的支持。
App 可以選擇自帶的佔位符或者自定義圖片作為圖標,並且打包編譯,發布到 App Store。Swift Playgrounds 自帶的手繪風格圖標頗有「Everyone Can Code」的質感。
寫完的 App 也可以直接發布 App Store 審核。
iPadOS 上 Swift Playgrounds 開發 App 的 .swiftpm 工程無法在 macOS 上的 Swift Playgrounds 中打開(或許還需坐等 macOS Swift Playgrounds App 更新),但是可以在 Xcode 的 Swift Playgrounds 模塊運行。
我們現在能夠看到 macOS 上 Xcode App 中的 Swift Playgrounds 功能模塊、macOS 獨立的 Swift Playgrounds App 與 iPadOS 上的 Swift Playgrounds App 三者並存且互相有所不兼容的情況。對於初學者而言,若不加了解,這確實是一條令人有些困惑的產品線。當然我相信 Apple 會在後續解決這一問題。
此次體驗下來,我認為新版的 Swift Playgrounds 也還存在以下不足:
對於想通過 Swift Playgrounds 入門編程的新手,我也在這里提出一些個人建議。
首先是設備,我手中的 2017 年款 iPad Pro(A10X 處理器)運行 Swift Playgrounds 4.0 沒有出現明顯的性能瓶頸,因此我姑且認為往後的新機型應該都有著不錯的性能表現。
文檔:前文說到,現有的 Swift Playgrounds 4.0 如果要以 IDE 的要求來看,還缺少必要的類型提示和文檔內容的說明。這時候我們也可以選擇手動查閱開發者文檔,這是 Apple 對各類系統框架事無巨細的說明。在 Swift Playgrounds 更早版本的更新中,Apple 已經將大部分的開發者文檔內置到了 Swift Playgrounds 中,我們可以在工具中找到文檔的查詢入口。或者,我們可以使用瀏覽器訪問 Apple Developer 開發者網站 查詢文檔。
Swift 語法入門:Swift Playgrounds 在更早版本中,已經提供了 游戲 化 Swift 語言學習的各種模塊,如果你是 Swift 語言的新手,可以通過學習官方提供的學習編程 1、2、3 和其他一系列的學習模塊來 探索 Swift 語言。
SwiftUI 入門:SwiftUI 是 Apple 發布於 2019 年 WWDC 大會的基於 Swift 的UI框架,結合了代碼 UI 編輯和 Storyboard 圖形化 UI 繪制的優點。因此 Swift Playgrounds 默認將 SwiftUI 作為創建一個空白 .swiftpm 工程後的初始界面模板。
如果你對 SwiftUI 還不熟悉,網上有不少優秀的教程內容可以學習,你可以在 Swift Playgrounds 跟著教程一起學習。當然,有時候自動補全功能的失效會給學習者帶來一點點困惑,我希望這個 Bug(但願不是一個 feature)能夠被盡早修復。當然,你也可以使用 UIKit 來實現界面,不過我認為現有的工作流更為 SwiftUI 量身打造。
嘗試 AR 體驗:如果你想在 Swift Playgrounds 開發的 App 中體驗一下 AR,Apple 的 AR Quick Look 頁面提供了不少開放的模型。我們可以通過創建 ARQuickLookPreview 來載入各類 USDZ 文件。
社群:現在基於 Swift Playgrounds 開發 App 的愛好者社群還在萌芽階段,因此找一個有 iOS 等生態開發經驗的朋友能夠極大提高你的學習速度。當然,你也可以創建一個社群讓好朋友們一起交流討論。比如少數派本身便是這樣一個不錯的社群,期待各位能在其中共同學習,各顯神通。
當然,瑕不掩瑜,我依然為這一次 Swift Playgrounds 的重大升級深感高興。在 iPad 上進行「真正」地開發 App 的呼聲從 iPad 推出之日起便此起彼伏。我在初中擁有第一台 iPad 2 的時候,就千方百計地嘗試用它來開發點什麼,而這一次的 Swift Playgrounds 升級則真正地表明了 Apple 的立場。
我一直不很在意關於 iPad 生產力的爭論。然而,我和身邊不少用戶切身體會到的,確實是 iPad 作為一個 科技 產品,給人源源不斷帶來的幸福感。書桌旁、畫架上、被窩里常常有著它和我形影不離。因此,和 Mac 相比,我一直覺得 iPad 是一個讓人更少異化、更多自由的產品形態。
因此 Swift Playgrounds 正如其名稱一般,也是一個大家能夠在代碼、多媒體內容與知識的 探索 與交互中自如玩耍的地方。在未來,並不會人人都做程序員,但 Everyone Can Code 能夠真正讓 科技 作為一種人文素養,讓每個人都徜徉其間,用開放包容和智慧的心態,面向與人類走向共融共生的通用智能。
庫克表示他不說元宇宙一詞,Apple 看好 AR。
AR、VR、AI、物聯網、區塊鏈、數字孿生、量子計算、Web3、元宇宙…… 各種詞彙總是在不經意間成為資本的寵兒,卻又在悄無聲息中急流勇退,大浪淘沙留下一波真正做事的人。
AR 作為在 iPad 先行的驗證,並被著力主推的技術能力,或許不久就會以全新的硬體形態與大家見面。運行在 iPadOS 之上的 Swift Playgrounds,結合 Apple 軟體全家桶的一系列應用,將進一步將多媒體的創造能力帶給每一個人,而這次會將 3D 沉浸空間體驗的創造也逐步納入進來,Swift Playgrounds 4.0 正是起點。
往後,Swift Playgrounds 結合 Reality Composer App 和大幅升級改造的「地圖」應用,使用 USDZ 格式文件,配合或將推出的穿戴式硬體設備,有可能能夠拓展成為一個「3D 沉浸式體驗編輯器」。它的潛力,可以是下一個時代的「Word」。當然,我們要看 Apple 將如何打這一套組合拳。
最重要的是,機遇永遠不在一家公司手中。創新、創業、創造將是每個人的全新可能,而這正是 Swift Playgrounds 作為這樣一個賦能人的工具,在根本上的意義:Give people wonderful tools, and they'll do wonderful things.
凡是過去,皆為序章。
3. iphone開發需要什麼
開發環境的要求
硬體:
1.蘋果電腦, 必須是基於Intel的Macintosh計算機。
2.iPhone或iPod Touch,主要用來測試編寫好的程序。
軟體:
1.蘋果系統MacOS。
2.iPhone SDK(請從http://developer.apple.com/iphone/下載最新版SDK),SDK中包含蘋果公司的集成開發環境Xcode,iPhone模擬器及其它一些開發工具。
開發環境的簡單介紹
開發環境主要包括
Xcode (主要開發工具)
Interface Builder (界面快速設計工具)
iPhone Simulator (iPhone模擬器)
SDK(Software Development Kit,軟體開發工具包)
Xcode簡單介紹
開發iPhone OS及Mac OS X應用,需要在Mac OS X運行Xcode開發工具
Xcode是Apple的開發工具套件,支持項目管理、編輯代碼、構建可執行程序、代碼級調試、代碼的版本管理、性能調優等等
Interface Builder 簡單介紹
可視化地設計應用程序的用戶界面。
從Interface Builder的控制項庫中通過拖拽創建諸如窗口,視圖,菜單,按鈕等
可視化的設置控制項屬性,建立各控制項之間的連接;
保存後的nib文件包括了控制項對象,控制項配置,以及控制項布局等信息,程序載入nib文件時根據這些信息創建對象。
Xcode 與 Interface Builder 的聯系
同時使用Xcode和Interface Builder工具,簡化代碼,便於維護,加快開發
使用Xcode來設計程序的邏輯,使用Interface Builder 來設計程序的界面。
關鍵字IBOutlet和IBAction在Xcode中用來聲明屬性和方法,在Interface Builder中與這些聲明建立連接。
iPhone模擬器
iPhone模擬器是可以在電腦上部署和測試你的應用程序的目標平台
iPhone模擬器提供了類iPhone的環境,通過菜單選項,可以模擬屏幕鎖,屏幕轉向,內存警告等功能
因為電腦沒有提供一些必要硬體,所以iPhone模擬器也有功能限制
iPhone模擬器
功能限制:
✕ 不能使用GPS定位
✕ 不能使用加速計
✕ 不支持超過2個手指的觸摸的多點觸摸
✕ 不能打電話
✕ 不能使用3G網路
✕ 不能使用相機和麥克風
✕ 僅提供一些原裝程序如Safari,Contact,Photos,Settings
✕ 無法測試程序對iPhone CPU和內存的消耗情況
SDK -Software Development Kit,軟體開發工具包。
為iPhone平台,Mac OS X系統編寫的軟體開發包和軟體框架。使用它提供的類和API等其它資源來快速開發針對特定硬體平台和操作系統的程序。
SDK有不同平台的版本(如iPhone平台,Mac OS X平台)和同一平台的不同版本。可以讓我們開發部署不同平台和同一平台不同版本的應用程序。
開發文檔的使用
Xcode帶有文檔瀏覽器,包括了類參考,API參考等。
訪問蘋果開發者官網(http://developer.apple.com/iPhone/),裡面有示例源代碼,技術指導文檔,參考文檔,視頻指導等等豐富的資源。
Objective-C語言是為支持面向對象編程而設計的一個簡單的計算機語言
Objective-C是標準的ANSI C的一個小而強大的擴展集
Objective-C對C的擴展都是基於Smalltalk語言
Objective-C給了C完全的面向對象編程能力。
Objective-C的編譯器基於gcc編譯器。
Objective-C語法是GNU C/C++語法的超集,
Objective-C編譯器能夠編譯C(.c),C++(.mm)以及Objective-C(.m)的源代碼。
Objective-C 類
一個類由兩部分組成:
介面(Interface),聲明方法,變數,指出父類和遵守的協議。文件後綴.h;
實現(Implementation),實現類,主要包括方法的實現。文件後綴.m
Objective-C 類的聲明
類的聲明的基本格式:
@interface ClassName : ItsSuperclass
{
instance variable declarations //實例變數聲明
}
method declarations //方法聲明
@end
比如:
@interface Rectangle:NSObject
{
BOOL filled; NSColor *fillColor;
@private:
float width; float height;
}
+ alloc; //類方法,[Rectangle alloc]
- (void)display; //實例方法 [rectangle display]
- (float)width; //存取器方法,和變數同名,獲取變數
- (void)setWidth:(float)inWidth; //set+變數名,設置變數值
- (void)setWidth:(float)inWidth height:(float)inHeight;
@end
Objective-C 編譯器對Objective-C源代碼(.m)進行編譯,要求方法返回值類型和參數類型都要用括弧括起來。
-(void)setWidth:(float)width height:(float)height;
多參數方法,有必要表明各個參數的功能
Objective-C 頭文件導入
#import "ItsSuperclass.h」
@interface ClassName : ItsSuperclass
{
instance variable declarations
}
method declarations
@end
#import關鍵字導入一個類的聲明,和C++中#include功能一樣
區別於#include,可以保證同一個類的聲明只被導入一次
Objective-C 類名的引用
#import "ItsSuperclass.h」
@class Rectangle;
@interface ClassName : ItsSuperclass
{
Rectangle *rectangle;
}
@end
@class 告訴編譯器Rectangle是一個類,不需要引入它的頭文件;
@class 縮短編譯代碼,減輕編譯器負擔。
Objective-C 類的實現
_每個類的實現中必須導入相應頭文件。如
#import "ClassName.h」
@implementation ClassName
method definitions
@end
4. 自學開發iphone app需要多久,學習規劃如何
無基礎文科生入門iOS的3個月(以第一個上線作為入門標准)
第一步:編程入門課
時間預計:4個星期
推薦看公開課,Udacity也行,網易公開課也行,自己找一個面對對象語言(一般是JAVA, C++, Python)的課。我是在網易公開課看的斯坦福的CS106A,學的JAVA。
如果你純粹學iOS開發,不推薦看哈佛CS50,CS50是給CS系的學生介紹整個計算機世界的框架,講的內容比較多,進度比較快,對iOS開發其實有點累贅了。(臣妾有點跟不上啊!!)計劃安排是一天一課,看課程要求的書(至少看完一本)及大部分作業。這一階段重點不是語法;
第二步:上手iOS!
時間預計:2星期
強烈推薦CS193P,老頭子講的超級好!我的很多東西(對象思維啥的)是在這里跟著做練習的時候才真正明白的(好啦,也可能是上一堂課練習做得少的原因)。如果等到9月應該itunes U上會開始教iOS 7了。網易公開課的是2010年iOS 5版的,前10堂課,也行。(iTunes U上有完整的課)
CS193P說有prerequisite,一開始被嚇到,事實證明還是可以學下去的。頭兩節課一頭霧水,沒關系,把itunes U上的課件下載下來,把所有代碼打出來,然後一個個元素對應之前學的語言匹配,再不懂先放著,繼續學後邊的,過幾天打多點代碼就懂了。
感覺學5、6堂課,一個星期左右就可以開始進入下一階段自己做東西了。之後用啥學啥,每堂課都有主題的。速度慢點的同學們,這階段跟我一樣准備兩個星期吧!
第三步:開發app!
時間預計:2星期(本人...1個半月,實在不好意思說出口)
這個時間就可長可短啦,還包括美工,交互啥的。堅持要用啥學啥的原則,其實就是知道iOS SDK都有什麼組件,每個組件有什麼function而已。stackoverflow, Github, apple sample code多上,搜索引擎多用。如果有個師傅,這個階段真的是進步神速。
好的!不出意外,你的第一個app就這么新鮮出爐了!從今天開始,成為一個冷艷逼格高尚的iOS開發者吧!