雖然不太難
不過圖都截了就來寫一寫
說明一下繳了保護費後到開始寫程式前的準備:
1.先登入http://developer.apple.com/,然後進到iOS Provisioning Portal
選取左邊Certificate,網頁會有一連串說明
2.接下來要取得certificate,讓認得準備拿來開發的MAC:
工具程式->鑰匙圈存取->憑證輔助程式->從憑證授權要求憑證
3.輸入E-mail、使用者名稱
比較重要的是:把"已將要求"選擇"儲存到磁碟",下一步後把產生的.cer檔存起來
4.網頁最下面可以找到submit,上傳剛剛的.cer檔後,頁面會跳轉,
如果certificate檔的狀態在pending,重整網頁應該就會變成active可下載的狀態了
5.下載後點兩下,憑證就會被加入,代表認證完成了
6.接下來要產生一個Team provisioning file,讓寫好的App可以通過code sign認證跑在裝置上
7.將裝置接上Mac
8.在orginzer中將任意一個裝置add to protal即可產生認證所有App的Team provisioning file
2011年12月28日
2011年11月14日
iOS 5 data storage的改變
由於iOS 5加入了iCloud的備份機制,資料儲存的規則多了一些規範
以下整理一下新的政策:
1. Critical Data:只有user自行加入、或無法重新取得的檔案可以放在/ Document底下,會被iTunes和iCloud備份
2. Cached Data:可重新產生、下載的檔案,如書籍、音樂要放在/Library/Caches ,不會被備份,low storage situations時會被清除
3. Temporary Data:暫存檔放在/tmp ,不會被備份,系統可能會清,官方建議不用就清除
4. Offline Data:5.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過幾天再來整理一下可用的資料夾
標籤:
data storage,
ios 5
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,再加入自訂的值,事情就比較麻煩一點
記錄一下有關自訂user agent的問題
一般request的自訂user agent可經由NSMutableURLRequest的函式達到:[request setValue:userAgentString forHTTPHeaderField:@"User-Agent"];
自訂一般UIWebView的request基本上也可以先定義好request後再由webview loadRequest:載入即可但如果要保有UIWebView裡原本request的user agent,再加入自訂的值,事情就比較麻煩一點
UIWebView預設的user agent大概長這樣:
一些值可能會隨版本而變動,可參考Safari Web Content Guide
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
標籤:
UIWebView,
user agent
2011年9月8日
XML Parser心得分享(2)-TBXML
另外一套是蠻多人推薦的TBXML
主要用法就是讀入檔案,然後用[TBXML elementName:element], [TBXML textForElement:element]取值
詳細可參照TBXML網站
因為開始第一次用,而且每次都要針對新的XML重新寫一遍delegate覺得很麻煩
就找了一下資料 ,後來參照了iOS下超级簡潔的xml解析框架:TBXML
修改了一下原始碼如下:
執行完會存成一個巢狀的NSDictionary結構
這樣應該可以處理稍微複雜一點、包含attribute的xml
主要用法就是讀入檔案,然後用[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
2011年8月29日
XML Parser心得分享(1)-NSXML
有網友留言問到XML處理,就把之前的草稿完成一下
怕文章太長不好讀,拆成兩篇寫
寫到現在遇過挺多處理case要xml資料
目前用過的XML parser有內建的NSXML和TBXML
這篇先簡單說明一下NSXMLParserDelegate三個重要的函式:
怕文章太長不好讀,拆成兩篇寫
寫到現在遇過挺多處理case要xml資料
目前用過的XML parser有內建的NSXML和TBXML
這篇先簡單說明一下NSXMLParserDelegate三個重要的函式:
標籤:
ios,
NSDictionary,
xml
2011年8月23日
兩個目前遇過的iOS 5 SDK crash bug
紀錄一下兩個升級iOS 5 SDK後遇到的error:
1. iOS 5好像還不太支援UIActivityIndicatorView
錯誤訊息:-[UIImage initWithCoder:]: unrecognized selector sent to instance 0xc974760
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage initWithCoder:]: unrecognized selector sent to instance 0xc974760'
參考自:http://stackoverflow.com/questions/7023430/uiimageview-initwithcoder-unrecognized-selector-sent-to-instance-ios-5-beta
解決方法:只好先把indicator移掉,或者用4.3 SDK跑就沒事
2. 一些專案不能用4.3 simulator跑
錯誤訊息:dyld: Library not loaded: /usr/lib/libc++abi.dylib ............. Reason: image not found
解決方法:先用5.0 simulator跑
debug了半天才知道是iOS 5的問題,目前還沒看到解法,看來只能等官方修正了
真的有案子要交的還是要準備兩套SDK阿阿阿
1. iOS 5好像還不太支援UIActivityIndicatorView
錯誤訊息:-[UIImage initWithCoder:]: unrecognized selector sent to instance 0xc974760
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage initWithCoder:]: unrecognized selector sent to instance 0xc974760'
參考自:http://stackoverflow.com/questions/7023430/uiimageview-initwithcoder-unrecognized-selector-sent-to-instance-ios-5-beta
解決方法:只好先把indicator移掉,或者用4.3 SDK跑就沒事
2. 一些專案不能用4.3 simulator跑
錯誤訊息:dyld: Library not loaded: /usr/lib/libc++abi.dylib ............. Reason: image not found
解決方法:先用5.0 simulator跑
debug了半天才知道是iOS 5的問題,目前還沒看到解法,看來只能等官方修正了
真的有案子要交的還是要準備兩套SDK阿阿阿
2011年8月16日
iOS 5關閉特定檔案的ARC
這篇文章參考以下影片完成:IOS5 -- How To Turn Off ARC On Individual Files
從iOS 4到iOS 5首先要面對的就是新增的automatic reference counting(第一次開專案看到release被deprecate有嚇到:P)iOS 5新專案有ARC,但舊的code卻沒有,筆記一下關閉特定檔案ARC的作法:以(Xcode 4為例)
點選專案檔,選target,在Build Phase中找到compile source
2011年8月11日
NSArray排序筆記
本來以為這種功能要自己實做的
沒想到iOS SDK關於array的排序還挺簡單的
整理幾個基本的常用用法:
1.字串(NSString)、日期(NSDate)排序
2.使用NSSortDescriptor達到降冪排序
3.元素為自訂物件的排序
沒想到iOS SDK關於array的排序還挺簡單的
整理幾個基本的常用用法:
1.字串(NSString)、日期(NSDate)排序
2.使用NSSortDescriptor達到降冪排序
3.元素為自訂物件的排序
2011年7月14日
iOS幾個UI應用整理
整理幾個比較特別的UI用法:
1.Custom UITableViewCell selected color
UIView *selectBgv=[[UIView alloc]init];
selectBgv.backgroundColor=[UIColor lightGrayColor];
cell.selectedBackgroundView=selectBgv;
[selectBgv release];
要注意的是,UITableViewStylePlain下cell.selectedBackgroundView是NIL,要自己alloc,UITableViewStyleGrouped則不用
2.Disable UIWebView scroll
[[[WebView subviews] lastObject] setScrollingEnabled:NO];
3.Remove UISearchBar background
[[searchbar.subviews objectAtIndex:0]removeFromSuperview];
- 自訂UITableViewCell的選取顏色
- 關閉UIWebView的scroll功能
- 移除 UISearchBar背景色
- UIColor自訂顏色注意事項
- 取得iPad, iPhone解析度
- 自訂UISegmentControl背景色
1.Custom UITableViewCell selected color
UIView *selectBgv=[[UIView alloc]init];
selectBgv.backgroundColor=[UIColor lightGrayColor];
cell.selectedBackgroundView=selectBgv;
[selectBgv release];
要注意的是,UITableViewStylePlain下cell.selectedBackgroundView是NIL,要自己alloc,UITableViewStyleGrouped則不用
2.Disable UIWebView scroll
[[[WebView subviews] lastObject] setScrollingEnabled:NO];
3.Remove UISearchBar background
[[searchbar.subviews objectAtIndex:0]removeFromSuperview];
2011年7月10日
CFWriteStreamOpen連線建很久
把前陣子遇到的問題筆記一下 :
前陣子嘗試著要做iOS裝置間訊息的傳遞
一開始找到了這個聊天室的範例:
http://mobileorchard.com/tutorial-networking-and-bonjour-on-iphone/
用Bonjour network發佈服務,傳輸部份則用CFStream來完成
run範例後跑起來有個問題:選擇了聊天室後,連線卻要等1分鐘左右才會建立
設了一些NSLog都跑完了,也可以打字,不過傳輸的文字還是傳不過去
但一分鐘後連線建立,聊天訊息傳遞得很順暢且很即時
前陣子嘗試著要做iOS裝置間訊息的傳遞
一開始找到了這個聊天室的範例:
http://mobileorchard.com/tutorial-networking-and-bonjour-on-iphone/
用Bonjour network發佈服務,傳輸部份則用CFStream來完成
run範例後跑起來有個問題:選擇了聊天室後,連線卻要等1分鐘左右才會建立
設了一些NSLog都跑完了,也可以打字,不過傳輸的文字還是傳不過去
但一分鐘後連線建立,聊天訊息傳遞得很順暢且很即時
2011年6月28日
2011年6月23日
In-app purchase和server測試的注意事項
之前有用到就整理起來,主要針對開始撰寫程式前需要的準備事項
改天再針對程式方面發一篇
整個過程,主要可以分成三種角色:Apple、商品提供者、程式開發者
下面列一下各個方面的一些注意事項:
改天再針對程式方面發一篇
整個過程,主要可以分成三種角色:Apple、商品提供者、程式開發者
下面列一下各個方面的一些注意事項:
標籤:
in-app pruchase,
ios,
objective-c
2011年6月17日
iOS App開啟載入的圖片(launch image)
如何替iOS App加入一個啟動時的載入圖片?
只要把圖片存成下列檔名後,加入專案中即可:
Default.png 320*480 iPhone, iPod
Default@2x.png 640*960 iPhone, iPod Retina Display
Default.png iPad Portriat
Default-Portrait.png 768*1004 iPad Portrait
Default-Landscape.png 1004*768 iPad Landscape
在xcode 4開始更簡單,只要在project或target裡Summary->Launch Images右鍵就可以直接加了
以為很麻煩的功能,其實出乎意料的簡單,記一下
只要把圖片存成下列檔名後,加入專案中即可:
Default.png 320*480 iPhone, iPod
Default@2x.png 640*960 iPhone, iPod Retina Display
Default.png iPad Portriat
Default-Portrait.png 768*1004 iPad Portrait
Default-Landscape.png 1004*768 iPad Landscape
在xcode 4開始更簡單,只要在project或target裡Summary->Launch Images右鍵就可以直接加了
以為很麻煩的功能,其實出乎意料的簡單,記一下
2011年6月13日
iOS 5 beta SDK touble shooting
如果有用到libz.1.2.3.dylib這個framework(例如ASIHTTP)
iOS SDK升級到5 beta會遇到下列錯誤:
ld: library not found for -lz.1.2.3
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-g++-4.2 failed with exit code 1
或是用了ASIHTTP:
iOS SDK升級到5 beta會遇到下列錯誤:
ld: library not found for -lz.1.2.3
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-g++-4.2 failed with exit code 1
或是用了ASIHTTP:
2011年5月17日
iOS keychainWrapper trouble shooting
之前把一個project用官方提供的Keychain Services加上了自動記憶帳號密碼的功能
一直都正常運作,直到某一天一台裝置忽然跑出了不該出現的assert:
結果錯誤訊息是-25300(errSecItemNotFound, The item cannot be found.)
然後試了:
得到-25299(errSecDuplicateItem, The item already exists.)
想說這下是見鬼了,查了一堆文件也沒找到解答,其他裝置好像也沒災情
解不掉就只好暫時丟著不管
一直都正常運作,直到某一天一台裝置忽然跑出了不該出現的assert:
NSAssert(SecItemAdd((CFDictionaryRef)
[self dictionaryToSecItemFormat:keychainData],NULL) == noErr, @"Couldn't add the Keychain Item." );
當機,帳號密碼存不起來想說嘗試著要把舊的刪掉加新的看看:
SecItemDelete((CFDictionaryRef)[self dictionaryToSecItemFormat:keychainData]));
結果錯誤訊息是-25300(errSecItemNotFound, The item cannot be found.)
然後試了:
SecItemAdd((CFDictionaryRef)[self dictionaryToSecItemFormat:keychainData],NULL));
得到-25299(errSecDuplicateItem, The item already exists.)
想說這下是見鬼了,查了一堆文件也沒找到解答,其他裝置好像也沒災情
解不掉就只好暫時丟著不管
2011年4月25日
UIWebView local file注意事項
不是什麼大問題,卡了關留個紀錄
1.加入檔案時,選Create folder reference for any added folders才會建立相對資料夾
否則雖然看到有個資料夾,build到機器上檔案還是全解在根目錄
1.加入檔案時,選Create folder reference for any added folders才會建立相對資料夾
否則雖然看到有個資料夾,build到機器上檔案還是全解在根目錄
2011年4月13日
message sent to deallocated instance 除錯
常常程式一長,哪邊就不小心多release了一次
這時候編譯器就只會告訴你:BAD_ACCESS,然後程式就死了
剛開始會google到去Argument加個NSZombieEnabled YES
會多吐一點東西讓你把bug除掉
今天遇到加了這個後error message變:
[CALayer release]:message sent to deallocated instance 0x4dd650
layer這麼多怎麼知道哪裡出問題阿???
google了一下才找到解法:
這時候編譯器就只會告訴你:BAD_ACCESS,然後程式就死了
剛開始會google到去Argument加個NSZombieEnabled YES
會多吐一點東西讓你把bug除掉
今天遇到加了這個後error message變:
[CALayer release]:message sent to deallocated instance 0x4dd650
layer這麼多怎麼知道哪裡出問題阿???
google了一下才找到解法:
2011年3月23日
訂閱:
文章 (Atom)