2014年4月9日 星期三

iOS記憶體相關-ARC相關

ARC:Automatic Reference Counting,自動引用計數。

1. iOS5(WWDC2011)之後提供。

2. ARC是新的LLVM 3.0編譯器的一項特性,透過編譯器使用靜態的方式全自動管理記憶體,開發者不需要再手動管理。

3. 原本管理記憶體時需要使用的retain,release和autorelease三個關鍵字都不再需要,這是使用ARC的基本原則。當ARC開啟時,編譯器將自動在程式合適的地方插入retain, release和autorelease

4. Property相關:
(1) strong:和原來的retain比較相似,strong的property將對應__strong的指標,它將持有所指向的對象
(2) weak:不持有所指向的對象,而且當所指對象銷毀時能將自己置為nil,基本所有的outlet都應該用weak
(3) unsafe_unretained:這就是原來的assign。當需要支援舊版的iOS時需要用到這個關鍵字。
(4) copy:和原來基本一樣,copy一個對象並且為其創建一個strong指標。
(5) assign:對於object來說應該永遠不用assign了,實在需要的話應該用unsafe_unretained代替(基本找不到這種時候,大部分assign應該都被weak替代)。但是對於基本類型比如int,float,BOOL這樣的東西,還是要用assign。

使用的大原則: 只要某個物件被任一strong指標指向,那麼它將不會被銷毀。如果對象沒有被任何strong指標指向,那麼就將會被ARC自動銷毀。

5. ARC的缺點:如果涉及到較為底層的東西,比如Core Foundation中的malloc()或者free()等,ARC就鞭長莫及了,這時候還是需要自己手動進行記憶體管理。

6. 與ARC比較:使用MRC的原則

每個物件或對象都有一個Reference Counting,當值變成0之後就可以進行記憶體回收,但如果操作不當可能會造成程式Crash,例如當Reference Counting=1時,就進行dealloc,因此Programmer進行記憶體管理時需特別注意。

如果需要持有一個物件或對象,那麼對其發送retain 後如果之後不再使用該對象,那麼需要對其發送release(或者autorealse) 每一次對retain,alloc或者new的調用,需要對應一次release或autorealse調用。

retain = Reference Counting +1
release = Reference Counting -1

即Object(1)-> Object(2)->Object(1)->Object(0)->dealloc
       retain          retain         Release      Release

7. 其他:Xcode內建提供了一個ARC自動轉換工具,可以幫助你自動將MRC轉為ARC
當然也可以自己動手完成ARC轉換,另外Xcode也支援專案同時將ARC與MRC混編。

2014年3月17日 星期一

IAP相關-3 測試帳號設定與申請

到iTunes Connect裡的Manage Users建立測試帳號
Select User Type 選擇 Test User 再按Add New User,表單填完就申請完成。
之後再測試IAP付費功能時 需要使用新申請的Test user帳號測試,
iphone需要先登出再登入這個帳號。

Test User 使用方式
1. 在 設定 -> Store -> 點Apple ID -> 點取消
2. 直接進入要測試的 APP 並進入購買頁按下購買
此時會要你登入 Apple ID
這時候再填寫 Test User 的帳號密碼

IAP相關-2 APP設定

到iTunes Connect裡的Manage Your Apps
依序填寫表單的項目吧 必須要上傳縮圖才能存檔,存檔之後可以再做修改。
iOS App Recent Activity 裡進入這個 App Detail
再選擇右邊藍色按鈕其中一個 Manage In-App Purchases
按左上的 Create New

選擇種類
Consumable 消耗性產品 (像是買虛擬幣或虛擬物品)
Non-Consumable 非消耗性產品(具有永久性)
Auto-Renewable Subscriptions 用戶到期後自動訂閱(到期前會自動續訂)
Free Subscription 免費
Non-Renewing Subscription 用戶週期性訂閱

比較重要的是 Product ID
依照APP的表示方式 domain name 反著寫
像是: tw.com.myapp.product




2014年3月16日 星期日

IAP相關-1 申請帳戶資訊

1. 使用IAP前請先確定實機沒有JB過

2. 登入itunes connect選擇Contracts, Tax, and Banking分別填寫資料

2.1 Contracts
建立一個聯絡人,填寫好姓名、E-mail、地址
Senior Management:
Finance:
Technical:
Legal:
Promotions:

2.2 Banking
以永豐銀行為例
Bank Account Currency: USD
Bank Name: BANK SINOPAC
Branch/Branch ID: (不必填寫,打一個空白即可)
Account Holder's Name: (你的戶名英譯)
Account Type: Savings/FUTSU
Account Number: (你的銀行帳號)
Bank Swift Code: SINOTWTP
Local Clearing Code: (不必填寫,打一個空白即可)

其他幣別請參考以下文件
https://b2c.mma.com.tw/MMA4txt/service/data/cjo_200611.pdf

2.3 Tax Info
人不在美國工作,當然沒有繳稅的問題,都選NO就好
1. Individual or Organization Name (你的姓名英譯)
2. Country of incorporation (居住地選 Taiwan)
3. Type of Beneficial Owner: (選 Individual)
4. Permanent Residence (永久地址)
5. Mailing address: (聯絡地址)
Name of Person Making this Declaration:   
Title: MR.

都填好之後 Status 會變成 Processing
之後若沒問題的話,會變成Contracts In Effect

2014年3月14日 星期五

iOS的Certificates (憑證檔)與Provisioning Profiles (提供描述檔)

將程式佈署到iOS實機上所需要的東西:

1. Certificates (憑證檔)
- Key (私鑰)

2. Provisioning Profiles (提供描述檔)
- App ID (Bundle Identifier)
- Devices (裝置)
- Certificates (憑證)


簡易流程如下:


首先繳交US $99/Year的費用給Apple。通過審核後即可透過iOS Developer申請憑證與登錄資料,完成後即可將你的程式佈署在實機上進行開發。

A. 先產生憑證檔,建立私有金鑰。

Step 1. 點選 應用程式 / 工具程式 / 鑰匙圈存取.app。

Step 2. 功能表 鑰匙圈存取 / 憑證輔助程式 / 從憑證授權要求憑證 選項。

Step 3. 輸入Apple ID的信箱與名稱,再把下方的選項勾選起來,按繼續。

Step 4. 選擇儲存路徑。

Step 5. 使用預設值(RSA 2048 bit)繼續,然後選擇完成。

B. 登入iOS Developer

Step 1. 在Certificates / Development 頁籤下,點右下的 Request Certificate按鈕。

Step 2. 點選擇檔案,載入剛儲存的CertificateSigningRequest.certSigningRequest檔,再按Submit鈕。

Step 3. 當Status變成Issud後,點後方的Download鈕,下載developer_identity.cer檔後,並雙擊此檔案。

Step 4. 開發者憑證匯入完成。

Step 5. 在鑰匙的頁籤下,可以看到Private Key與iPhone Development憑證相互的關聯在一起。

C. 登錄裝置的UDID

Step 1.  選擇Device,點右上角的Add Devices鈕。

Step 2. 透過iTunes抓取裝置的UDID並進行登錄。

Step 3. 完成

當然,如果不想花錢,也可以先將iPhone JB後,修改Xcode相關的設定檔也可以將程式佈署在實機上,但是並不建議,因為會花去很多時間修改與測試,而每次當Apple升級Xcode後就要重新跑一次流程,非常不方便。