2012年10月13日 星期六

IOS 小畫家基本實作(ㄧ)

實作一個最基本的IOS手指觸控繪圖功能,內含兩個畫布,使用一個Button來切換,並提供點擊兩次來清除畫布內容的功能。
Xcode版本4.5.1

1. 開啓一個專案

2. 設定成iPad直立模式,並放上一個Button到UIView

3. 增加一個新個UIViewController的Class檔,這是給畫布用的。

4. 註冊Button到mainViewController.h,並增加兩個畫布instance

#import <UIKit/UIKit.h>
#import "PaintMaskViewController.h"

@interface mainViewController : UIViewController

@property (weak, nonatomic) IBOutlet UIButton *toggleCanvasBtn;

@property(nonatomic, retain) PaintMaskViewController *painCanvasView1;
@property(nonatomic, retain) PaintMaskViewController *painCanvasView2;


@end

5. 增加畫布的設定與控制碼
#import "mainViewController.h"

@interface mainViewController ()
@end

@implementation mainViewController

@synthesize toggleCanvasBtn;

@synthesize painCanvasView1;
@synthesize painCanvasView2;

BOOL canvasIsShowed;
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
   
    canvasIsShowed = FALSE;

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)toggleCanvas:(id)sender
{
    if (canvasIsShowed) {
        [toggleCanvasBtn setTitle:@"圖二" forState:UIControlStateNormal];
       
        if (painCanvasView2 == nil) {
            painCanvasView2 = [[PaintMaskViewController alloc] init];
            //[painCanvasView initialize];
        }
       
        [painCanvasView1.view removeFromSuperview];
       
        [self.view addSubview:painCanvasView2.view];
        

        canvasIsShowed = FALSE;
    }else {
        [toggleCanvasBtn setTitle:@"圖一" forState:UIControlStateNormal];
        if (painCanvasView1 == nil) {
            painCanvasView1 = [[PaintMaskViewController alloc] init];
        }
       
        [painCanvasView2.view removeFromSuperview];
       
        [self.view addSubview:painCanvasView1.view];  
       
        canvasIsShowed = TRUE;
    }

}

@end

6. 在PaintMaskViewController.h設定UIImageView
#import <UIKit/UIKit.h>

@interface PaintMaskViewController : UIViewController

@property(nonatomic, retain) UIImageView* drawImage;

@end

7. 在PaintMaskViewController.m加入觸控畫圖的程式碼
#import "PaintMaskViewController.h"

@interface PaintMaskViewController ()

@end

@implementation PaintMaskViewController

int mouseMoved;
BOOL mouseSwiped;
CGPoint lastPoint;
CGPoint currentPoint;

@synthesize drawImage;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    if(drawImage == nil) {
        self.view.frame = CGRectMake(0, 0, 720, 800);
        self.drawImage = [[UIImageView alloc] initWithImage:nil];
        drawImage.frame = self.view.frame; //此處非常重要,注意
        [self.view addSubview:self.drawImage];
       
    } 
   
    mouseSwiped = NO;
    UITouch *touch = [touches anyObject];
    if ([touch tapCount] == 2) {
        drawImage.image = nil;
        return;
    }
    

   lastPoint = [touch locationInView:self.view];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    mouseSwiped = YES;
    UITouch *touch = [touches anyObject];
    currentPoint = [touch locationInView:self.view];
   
    [self drawLine:1];
   
    lastPoint = currentPoint;
   
    mouseMoved++;
   
    if (mouseMoved == 10) {
        mouseMoved = 0;
    }
}


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    //Double click to clean the canvas
    UITouch *touch = [touches anyObject];
    if ([touch tapCount] == 2) {
        drawImage.image = nil;
        return;
    }
   
    if(!mouseSwiped) {       
        [self drawLine:0];
    }
 }


- (void) drawLine:(int) move
{

    UIGraphicsBeginImageContext(self.view.frame.size);
    [drawImage.image drawInRect:CGRectMake(0, 0, drawImage.frame.size.width, drawImage.frame.size.height)];
    

    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
   
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
   
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 1.0, 0.0, 1.0);    


    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
   
    if (move == 1)
        CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
    else
       CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
   
    CGContextStrokePath(UIGraphicsGetCurrentContext());
   
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}

@end

8. 執行結果,兩張畫布切換



2012年10月12日 星期五

Xcode - 模擬器不能執行的問題 (一)

最近在開發過程中遇到iPAD Simulator無法執行,但如果切換成iPhone又可以執行,
最後找到這個網址說明問題
http://kalvar-kaki.blogspot.tw/2012/09/xcode.html

轉貼內容

Xcode - 模擬器不能執行的問題(Simulator Death.)

如果遇到模擬器黑幕、沒畫面、按下 Build & Run 沒反應等等不能執行的狀況時,就重新設定模擬器 : 硬件 > 設備 > 換一個不同於當前的 Devices > 再換回來原 Device。之後,再去檢查模擬器裡,是否有 2 支重複 Build 的 App Project. 如果有,就將這 2 支舊的都刪除,再重新 Build & Run 即可正常執行。
例如 iPad > 換成 iPad (Retina) > 再換回來 iPad 以 Reset Simulator Device.
Step 1. To Change the New Device of Simulator.

Step 2. To Change Back the Original Device of Simulator.




真的可以解決,但原來方便的設定還是回不來。
切換不同專案過程中,都要重新設定一次。

2012年10月11日 星期四

Apple 中文開發者網站

http://www.cocoachina.com/

內容都是中文的,而且非常全面,值得去看。

Application Loader的使用

App上架的路徑有兩種

第一種:直接使用xcode上的Archive方法,參考前一篇Mac App上架方法

第二種:就是本篇使用的方法,以下就是步驟

1. 先將完成的App壓縮,要到設計檔的目錄區。






2. 打開Application Loader

3.  Application Loader畫面,選擇Deliver Your App就開始後續的傳檔步驟了。


 4.如果你有好幾個Application待上傳,藍色區應該會有好幾個選項,普通只有一個。

5.  Choose 去選擇檔案(zip檔)

 6. 選好後,Send給他寄出去

7. 開始傳檔了,等好久,可能是檔案大了些。 (可以去洗個澡吧)

8. 全部傳完了。Next下去就會到結束畫面。


 9. 傳說中的結束畫面。



10.  隨時注意錯誤回覆的email,如果沒有錯誤,就大約一周的Review時間了。

IOS App上架經驗分享(一)

這是本人的血汗經驗,全因卡在Validation

1. 錯誤點,不論是用Xcode的Archive,還是用Application Loader,都會有以下圖示的錯誤。
"Unable to Parse application info.plist for validation."




2. 網路上也有相同錯誤的例子
http://stackoverflow.com/questions/11402575/ios-application-loader-error-unable-to-parse-application-info-plist-for-validat

基本上是說,要將info.plist檔案存成Unix文字模式,在mac上的建議工具是TextWrangler(free)


3. 實際上以我的例子,卻是圖檔的名稱,原來圖檔名是 meifa72.png/ meifa144.png,後來經過不斷實驗,終於確認只要將檔名改成72.png/144.png就可以過Validation。經過整個過程再一次的確認,問題出在原來的檔名,不知何時被夾帶了控制碼,可是肉眼是看不出來的,這樣的問題,要算是我的失誤,還是是Apple的Bug?

至於控制碼出現的原因,可能是中文輸入法切換的過程中,誤植了控制碼到英文檔名上。

個人意見是,這不是應該在Build的過程中就告知開發人員嗎,而且也應該注明是那一個檔案的問題,這樣才能節省開發者的時間,白白浪費了三天在這個問題上。


Apple App上架方法

一個不錯的參考網址
http://forum.gamer.com.tw/C.php?page=1&bsn=60521&snA=8284

以下是內容轉貼,其中有部分內容會加上我的註解。
過程中如果有問題可以參考網頁技術文件
https://developer.apple.com/library/ios/#technotes/tn2250/_index.html#//apple_ref/doc/uid/DTS40009933-CH1-TNTAG13


本人使用版本
Xcode 4.5.1
IOS6
開發平台 Mac 4.8.1


1.
要將你的 App 上架時
首先你必須登入你的 iTunes Connect
請點選觀看圖片

2.
這是登入後的畫面,選擇 "Manage Your Applications"
請點選觀看圖片


3.
進入後的畫面,這邊可以看到你送審過的畫面
像是我的有四個 App 送審,其中 App 名稱前面有個圓球
綠的是已經上架了,橘的是還在申請中或還沒上傳,紅的是審核沒過或是上傳的專案有錯誤
(Detail 頁面有詳細的狀態說明)
當然要申請新的 App,所以要按左上角的 Add New App
請點選觀看圖片

3.1 這邊會先出現公司/開發人員名稱如圖,才會出現App Information的畫面。



4.
按下後的頁面(App Information),這邊會輸入詳細資訊
Default Language 是你的 App 的預設語言
App Name 是你的 App 上架後的名稱,這邊可以跟自己專案的名稱不同
但是這個名稱是唯一的,不得重複
SKU Number 這邊是 App 的識別名稱,只要有辦法識別就好了
Bundle ID 這是你的 App ID,沒申請的話可以點下面的 Here 來註冊一個新的
請點選觀看圖片

其中SKU Number,參考下面說明(來源:http://blog.gilbert.tw/2012/02/sku-number.html)

SKU number

在 app store 申請 app 上架時要填一個 SKU number 的資訊,欄位旁的說明是:
A unique number used to identify the app you are adding.
這個 SKU 是 Stock Keeping Unit 的縮寫,有人翻譯成「庫存單位」或「最小存貨單位」,係指商品庫存控制時的最小單位。比如說一隻原子筆有筆套和筆兩個部位,如果將筆套和筆各自當作庫存單 位,那麼一隻原子筆就有兩個 SKU number,筆套和筆各自有一個 SKU number。如果不將筆套和筆分開來算,兩個合在一起當作一個庫存單位,那就只有一個 SKU number。SKU number 是各公司自行定義、編碼的,以上例來說,一般書局、文具店會把筆套和筆當成單一商品,給與一個 SKU number。但原子筆的製造商,就會將筆套和筆各自賦予一個 SKU number。
因此 app store 裡的 SKU number,是軟體開發者用來分辨自己開發的 app 所使用的唯一編號。雖然欄位說明是寫 a unique number,但實際上可以輸入文字或空白,因此如果不曉得要怎麼輸入,直接輸入 app 名稱也行。唯一要注意的是,這個 SKU number 在 app 建立之後就不能修改,請特別留心(不是送審之後,是在 iTunes Connect 裡完成 Add New App 流程之後就不能改!)。
不能寫中文窩


5.
此步驟在真機測試時就會做到,因此基本上可以跳過
App ID 同樣在這個頁面按下 New App ID 的按鈕
請點選觀看圖片

Description 是你這個 App ID 的描述,方便你識別是哪個 App ID
Bundle Identifier 是你的 App 獨一無二的 ID,格式是網址的反打
像是巴哈的網址是 www.gamer.com.tw
那 Bundle Identifier 就是  tw.com.gamer.(App名稱)
請點選觀看圖片


6.
這個畫面是設定你的預計上架時間與價格
Availability Date 就是預計上架時間,這是給有特定時間限制時用的
設定完畢後還需要寄信跟 Apple 審核人員說明你的 App 需要在你設定的那一天上架
這樣子審核的人才會儘快去審理你的 App
Price Tier 是收費價格設定
(價格範圍從免費到 NT29900,詳細的定價點選 View Pricing Matrix 就能看到了)
Discount for Educational Institutions 是是否要使用教育優惠價格
Custom B2B App 這個是給公司私人用的 App 不在 App Store 上出現
請點選觀看圖片



7.
這一頁需要輸入的內容比較長,所以我將它分成四張圖來說明
最上面的是版本資訊
Version Number 是版本編號
Copyright 是版權資訊
Primary Category 是主要的分類
Secondary Category 是次要的分類,這個是選項,可打可不打
Review Notes 是審查的附加資訊,像是你的 App 有需要帳號、密碼等入某個網站時
就需要提供測試帳號給審核人員使用,這個也是選項,可打可不打
請點選觀看圖片

這一個是 App 的分級制度的評分選項
這部份我沒刻意去讀它,所以需要的人就去自己翻譯吧
請點選觀看圖片

這邊是輸入詳細描述的地方,這邊的資料都會出現在 App Store 上
Description 是你的 App 的描述
Keywords 是關鍵字,這是在 App Store 上搜尋的時候會用到
Support Email Address 是你的 Email
Support URL 這是你的網站,開發者通常會需要一個網站,我自己就是用我的 Blog 當我的網站
Marketing URL 這是行銷網站,這個也是選填的
Privacy Policy URL 這是隱私權保護政策的網站,也是選填的
請點選觀看圖片

這邊是上傳你的圖檔
Large App Icon 是你的 App Store 上的 icon,這個 icon 可以與 App icon 不同
(現在的大小限制是 1024*1024 或 512*512,檔案格式限定為jpg、jpeg、png、tiff)
iPhone and iPod touch Screenshots & iPad Screenshots
是你的 iPhone 或 iPad 版的 App 螢幕截圖,如果只做兩個版本其中一個時就只要上傳其中一個就好了
請點選觀看圖片

設定完成後就會回到一開始的新增 App 的畫面
點一下你的圖示就會進入你的 App 詳細資訊
在這頁面的下方會有這個圖示,點選 View Details 就到下個畫面
請點選觀看圖片

點選右方的 Read to Upload Binary 就可以準備上傳了
請點選觀看圖片

上傳前還是會問你一些問題
第一個問題是問你要不要加密你的檔案
第二的問題是問你有沒有使用密碼功能
請點選觀看圖片

這樣子網頁上的設定就完成了,接下來就要回到你的 Xcode 就行上傳的預備動作了

接下來回到 Developer center (開發者中心) 的網頁申請發佈程式用的憑證
請點選觀看圖片

在這個頁面的右邊有幾個選項,這次是選 iOS Provisioning Portal
(這個選項與以下頁面只有付費開發者才能看到)
請點選觀看圖片

進入後點選左邊的 Provisioning 的選項
請點選觀看圖片

之後進入 Distribution 的頁面
請點選觀看圖片

點選 New Profile 建立一個新的發佈用的 Profile
請點選觀看圖片

這邊是建立時的選項
Distribution Method 這是選擇你要上架的位置
App Store 這不用說,就是上架到程式商店中販賣
Ad Hoc 這是只能使用自己的電腦進行發佈程式
第二個選項是給公司發佈只給公司自己使用的 App 用的
Profile Name 就是 Profile 的名稱,這部份是建議與要發佈的 App 相同的名稱
Distribution Certificate 這是發佈證書的擁有者,這邊是寫開發者的名字
旁邊的括號是開發者的期限,我的是到今年的 10 月 12 日
在那之前我還需要繼續付 3200 的年費保持我的開法者的身分
不然我的程式都會被強制下架
App ID 這跟上面申請的那一個是一樣的,所以要選相同的 App ID
請點選觀看圖片

申請完畢後就會回到之前的頁面
可以你申請的名稱的那一行看到一個 Download 的按鈕
(一開始不會看到這個按鈕,需要重新整理頁面才會看到)
請點選觀看圖片

憑證下載下來後只要直接執行它就會被安裝到你的 Xcode 中了
請點選觀看圖片



接下來就回到開發程式 Xcode 中操作了

目前我自己測試的上架的xcode版本為4.5.1,
其他的與原作者相同


這點需要注意
請點選觀看圖片

在發佈前你必須將你的專案中 Bundle Identifier 改成與申請時相同一個
請點選觀看圖片

之後在選擇要發佈的憑證,就是打馬賽克的那一行
請點選觀看圖片

發佈程式時發佈的裝置要選擇 iOS Device
這時候不用接上實際的裝置
請點選觀看圖片

接下來選擇上面的 Product 的選項,會出現一個下拉式清單
選擇 Archive 打包你的專案
請點選觀看圖片

打包完之後就先選擇 Validate 驗證是否能上傳
驗重通過後就能選 Distribute 將你的專案上傳給 Apple 審核了
請點選觀看圖片

上傳完畢後需要等 12 天 (7 個工作天) 的審核時間
當審核過關後就會將你的 App 上架了

本人上傳過程如下列各圖




2012年10月9日 星期二

如何尋求Apple的技術支援

在開發Apple App的過程中,如果遇到了一些奇怪的問題,在網路上也找不到解答時,這時就只好尋求技術支援了。

IOS開發帳號上的問題可以打 0800-022-237會連到大陸的服務中心,有服務人員會解說帳號上的問題

現在如果是技術上的問題,這些服務人員也無法解答,這時就必須到Apple的網站上去提問題了

1.首先當然是登入到https://developer.apple.com網頁了,使用開發者賬號進去吧

2. 先到論壇上搜尋一下,看看是否就有答案了(參考 http://kirenenko-tw.blogspot.tw/2012/10/apple.html )

3. 如果還是沒有解答,就看問題是哪一種,進去主題區,參考圖上紅色,發表一個新的主題

4. 另外再回到最上層的Member Center,參考圖中紅色區,進入技術支援區

5. 進入後,發出技術支援請求(參考圖中紅框)

6. 這時就會進入技術支援請求單的網頁(很長 參考連續抓的圖),依序仔細描述你的問題




6. 寫完後,網頁的最下面有Submit,就完成了一個技術提問了。回到上一頁後,Reflash網頁,就可以看到"Technical Support History"上有一個item,

7. 等待回應囉。
我的例子是十二小時就得到回覆了。

2012年10月8日 星期一

如何抓取iPAD上的視窗畫面

本方法僅限於有開發者賬號,並已經將驗證碼載入到iPAD上的人可以使用。如果沒有開發者賬號,則可以用右上的螢幕開關鍵及Home鍵同時按下來做截圖,然後用iPhoto來傳送即可。

驗證碼載入請參考前篇,實機測試篇的說明。


1. 開啟Xcode,然後選擇Organizer


 2. 開啟Organizer後,選擇Device,再選擇左邊的ScreenShot,然後右下會有一個NewScreen,此時必須連接到iPAD/iPhone上,並開啓iPAD/iPhone,然後就會將目前iPAD上的畫面抓下來到Organizer上了。如果要取出畫面檔,就用下面的Export,存到所需要的目錄上吧。

Apple 開發者技術論壇

在蘋果的網站上有一個Mac App開發者技術論壇,可以找到不少奇怪問題的解答。

1. 首先使用帳號進入https://developer.apple.com/ ,進入IOS Dev Center

2. 進入後,在左下角有一個Apple Developer Forums,點選後進入。

3.一般我們會選擇最上面的IOS Development,第一次進入時會要求給予一個論壇化名,此化名未來不能更改,取一個響亮的名字給自己。

4. 進入後,就會看到許多分類區,或是直接在右上打入要搜尋的主題。

在上面我找到不少奇怪問題的解答,給有需要的人參考一下。

2012年10月7日 星期日

Mac App 實機測試流程

首先轉貼http://jmehsieh.blogspot.tw/2011/04/itunes-connect.html
其內容已經寫得非常清楚了

還有一個Blog也寫得非常清楚,將此一內容寫成四個章節。
http://itouchs.blogspot.tw/2011/08/idevice-app.html
http://itouchs.blogspot.tw/2011/08/idevice-app_15.html
http://itouchs.blogspot.tw/2011/08/idevice-app-app-id.html
http://itouchs.blogspot.tw/2011/08/idevice-app-provisioning-profile.html


注意事項:申請憑證時,請使用Safari,可以減少不必要的麻煩。

基本上只要參照上面兩個Blog就應該差不多了,以下是本人實作後,再整理後的內容。

在開始之前要瞭解一下取得憑證的方法,參考
http://itouchs.blogspot.tw/2011/08/idevice-app.html

a. 憑證分二大類:
(1). 開發憑證 (Development Certificates)
---> 適用於 App 開發者本身.
(2). 發佈憑證 (Distribution Certificates)
依發佈的對象, 可再分成二類:
(a). App Store mode: 由 Apple 來評鑑.
(b). Ad Hoc mode: 供測試使用者使用.

b. 開發憑證發佈憑證, 必須分別產生  



憑證完成後,就可以開始『實機測試』
目標:製做出 Development Provisioning Profile,灌進 Xcode,並在專案設定中指定 Provisioning Profile,搞定。


流程一:


  1. Development Certificate:
    • 開發用的 Mac 電腦上必須灌有經過 Agent/Admin 簽章認可的憑證。
      (個人的話Admin就是自己了)
    • 開啟 Mac 上的 keychain.app,依照文件中的敘述步驟製作憑證請求 (Certificate Request)
    • 進入 iOS Provisioning Portal 後,在 Certificate 區的 Development tab 上傳自己的 request ,接著就等待層級高的人來 approve,如果是個人 refresh 一下就 approved 了。
    • Approved 後就下載下來點兩下執行,他就會在 Mac 上的 keychain.app 中記錄下來。
  2. Device ID:
    • 測試用的 iDevice 的 ID 必須登錄在 iOS Provisioning Portal 網頁上,並且經過 Agent/Admin 認可。
    • 一樣在 iOS Provisioning Portal 中的 Device ID 區中設定,ID取得方式文件中有教學。
    • 注意!一個帳號最多100個 iDevice ID 的 quota,移除一個device 並不會讓 quota +1。
  3. App ID: 
    • iOS Provisioning Portal 上必須新增一筆 app ID,至於 app ID 由 2 parts 組成
      Bundle Seed ID . Bundle Identifier
    • 左邊是 Apple 產生的,右邊是自己定的,每次新增 App ID ,左半部都可以選擇要用之前產生過的還是讓 Apple 新產生一個。共用同一組 Seed ID 的 app 可以 share 一些資訊,所以就看 developer 自己斟酌用了。
    • 右邊通常是建議 com.yourdomainname.appname,當然也能用『萬用字元:*』。用萬用字元就代表沒有特定指定哪一個 app,好處是每次要測試一個新 app 不用重新建立一個 App ID,用這次建立過的就可以實機測了。當然壞處就是無法加入 Push Notification 這種功能

以上3點為流程一所需要的準備步驟,接下來進入
流程二:


  1. 根據流程一的開發用 Mac 機器認證 + 被認可的 iDevice ID + 被認可的 App ID
    • 在 Provisioning 區的 Development tab 中利用 New Profile,選取剛被簽章過的憑證、選擇一個 App ID,勾選要拿來測試的 iDevice IDs,就能製做出我們需要的 Provisioning Profile 了。

流程三:
  1. Provisioning Profile 製做完,下載到 Mac 機器上並拖移到 Xcode,他會自動安裝
  2. 在 Xcode 專案設定中將 Code Sign (Debug) 改為 這次灌好的 Provisioning Profile,就可以編譯到測試用的 iDevice 上實機測試了。

後面將記錄本人過程圖片

1. 首先進入https://developer.apple.com/  ,並登入進去

2. 進去右上的Member Center,以下是進入後的畫面

3. 選擇中間的iOS Provisioning Portal進入後,圖中的左邊就是執行程序,依序執行,可參考前面轉貼的內容來執行。

4. 每一個執行程序都有一個"How To",仔細地說明填寫方法,首先第一步可參考
http://fstoke.me/blog/?p=1805 ,裡面已經寫得很清楚了,就不再另外說明。


5. Devices部分,要確認每一台要加入真機測試的ID,

5.1 iPhone可參考http://fstoke.me/blog/?p=1805  ,或是http://itouchs.blogspot.tw/2011/08/idevice-app_15.html的說明,


查詢設備的 Device ID:

       => 最方便取得(copy) UUID 的方式, 就是先將 iphone 接上 Mac 或 PC, 開啟 iTunes,
             先點到所連結裝置的地方, 在序號的地方 click 一下, 會切成顯示: UDID;
             這時只要在 iTunes 的功能列 > 編輯 > 拷貝 即可 copy 到 UDID

       (或可在 iDevice 上安裝 Ad Hoc Helper 來查詢)

5.2 iPad部分可參考http://phonewalker.blogspot.tw/2011/06/iphone-iphone.html ,專貼內容如下

目前我是使用ipad測試,連接後開啓xcode , windows->organizer即可看到Device ID號碼,每台機子都不同,




6. 以下是App IDs的填寫方法

6.1 選擇右邊,增加一個新App ID

6.2 進入畫面後,有兩個地方需填資料,第一個填入說明,第二個填入識別名。第一個有些字元不可用要注意,第二個識別碼要用類似網址的方式填入。

6.3 填完後的識別碼是要放在Xcode專案下的


7.  建立Provision Profile及之後的步驟,http://fstoke.me/blog/?p=1805,寫得非常詳細,
或是參考http://itouchs.blogspot.tw/2011/08/idevice-app-provisioning-profile.html,也寫得不錯,
這裡不再另外說明了。

後續有些細節說明可參考
http://blog.csdn.net/totogogo/article/details/7376214
內容寫得很詳細。

另外如果遇到Code Sign error問題,可以參考
http://fstoke.me/blog/?p=2371

以後如有需要補充的,再擇機增添內容。