2012年2月22日

Certificate, Provisioning file, code signed

整理好了就來貼一下:

Apple iOS developer的帳號可分為兩種:
個人開發:99 USD/年,可部屬App到最多100台開發用裝置上
企業用:  299 USD/年,需企業資格,不可上架,但可部屬App到任意裝置上(也有100台開發用裝置Quota)
可參考https://developer.apple.com/programs/ios/enterprise/

2011年12月28日

iOS developer實機開發前二三事

雖然不太難
不過圖都截了就來寫一寫
說明一下繳了保護費後到開始寫程式前的準備:
1.先登入http://developer.apple.com/,然後進到iOS Provisioning Portal
選取左邊Certificate,網頁會有一連串說明
2.接下來要取得certificate,讓認得準備拿來開發的MAC:
工具程式->鑰匙圈存取->憑證輔助程式->從憑證授權要求憑證


3.輸入E-mail、使用者名稱
比較重要的是:把"已將要求"選擇"儲存到磁碟",下一步後把產生的.cer檔存起來
image.png
4.網頁最下面可以找到submit,上傳剛剛的.cer檔後,頁面會跳轉,
如果certificate檔的狀態在pending,重整網頁應該就會變成active可下載的狀態了
image.png
5.下載後點兩下,憑證就會被加入,代表認證完成了
image.png
6.接下來要產生一個Team provisioning file,讓寫好的App可以通過code sign認證跑在裝置上
7.將裝置接上Mac
8.在orginzer中將任意一個裝置add to protal即可產生認證所有App的Team provisioning file

2011年11月14日

iOS 5 data storage的改變


由於iOS 5加入了iCloud的備份機制,資料儲存的規則多了一些規範
以下整理一下新的政策:
1.          Critical Data:只有user自行加入、或無法重新取得的檔案可以放在/Document底下,會被iTunesiCloud備份
2.          Cached Data:可重新產生、下載的檔案,如書籍、音樂要放在/Library/Caches,不會被備份,low storage situations時會被清除
3.          Temporary Data:暫存檔放在/tmp,不會被備份,系統可能會清,官方建議不用就清除
4.          Offline Data5.0.1新增”do not back up”的屬性,讓檔案即使放在/Document也不會被備份,且low storage situations時不會被清除,但也是建議不用就清除

此外QA1719中還提到了Offline Data:不可重新產生但會影響使用者體驗的檔案可擺在Private Documents或/Document,但如果把檔案擺在/Document則需設定好”do not back up”的屬性,否則會被reject(目前有聽過這樣的案例)

1719中也提到設定”do not back up”的方法

另可參考QA1699 Storing Private Data
過幾天再來整理一下可用的資料夾

2011年10月15日

UIWebView自定user agent

不知道忙什麼一個月就過去了
記錄一下有關自訂user agent的問題

一般request的自訂user agent可經由NSMutableURLRequest的函式達到:[request setValue:userAgentString forHTTPHeaderField:@"User-Agent"];
自訂一般UIWebView的request基本上也可以先定義好request後再由webview loadRequest:載入即可但如果要保有UIWebView裡原本request的user agent,再加入自訂的值,事情就比較麻煩一點
UIWebView預設的user agent大概長這樣:
Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/534.32 (KHTML, like Gecko) Mobile/8F190
一些值可能會隨版本而變動,可參考Safari Web Content Guide

2011年9月8日

XML Parser心得分享(2)-TBXML

另外一套是蠻多人推薦的TBXML
主要用法就是讀入檔案,然後用[TBXML elementName:element], [TBXML textForElement:element]取值
詳細可參照TBXML網站
因為開始第一次用,而且每次都要針對新的XML重新寫一遍delegate覺得很麻煩

就找了一下資料 ,後來參照了iOS下超级簡潔的xml解析框架:TBXML
修改了一下原始碼如下:

- (void)parse{
if (xmlData.rootXMLElement) {
TBXMLElement *element = xmlData.rootXMLElement;
[self recurrence:element];
}
else {
NSLog(@"Format Error!");
}
}

//遞迴
- (void)recurrence:(TBXMLElement *)element {
do {
//NSLog(@"<%@>:{%@}",[TBXML elementName:element], [TBXML textForElement:element]);
// Display the name of the element
if ([dic objectForKey:[TBXML elementName:element]]) {//如key name重複,命名為parent_chlid
[dic setObject:[TBXML textForElement:element] forKey:[NSString stringWithFormat:@"%@_%@",[TBXML elementName:element->parentElement],[TBXML elementName:element]]];
}
else{
[dic setObject:[TBXML textForElement:element] forKey:[TBXML elementName:element]];
}

//迭代處理所有屬性
TBXMLAttribute * attribute = element->firstAttribute;
while (attribute) {
//顯示
//NSLog(@"<%@>->[%@ = %@]", [TBXML elementName:element], [TBXML attributeName:attribute], [TBXML attributeValue:attribute]);
//迭代
attribute = attribute->next;
}

//遞迴處理子樹
if (element->firstChild) {
[self recurrence:element->firstChild];

}

//迭代處理sibling
} while ((element = element->nextSibling));

}

執行完會存成一個巢狀的NSDictionary結構
這樣應該可以處理稍微複雜一點、包含attribute的xml