post | sidebar | footer

2013/3/2

[iOS] 關於 Provisioning Profiles 這些事

[前言]

當擁有有開發者帳號最重要的一件事情就是實機部屬測試,但事與願違,進行實機測試常常會有很多錯誤,讓你憑證檔 (Certificates) 跟提供描述檔(Provisioning Profiles) 常常砍阿砍得裝阿裝到最後為什麼可以RUN也不知道,所以這篇就是會了解決所有疑難雜症的產物

我不入地獄誰入地獄 Orz

(這篇欠很久了一直沒有寫上來,因為沒時間)



[原因]

通常無法實機部屬是由以下原因導致的

Certificates (憑證檔)
  • Key (私鑰)

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


[檢查順序]


1.該專案使用哪個 Provisioning Profiles
3.Provisioning Profiles 有沒有包含您的憑證
可參考 [iOS]Code Signing Identity 無法選擇需要的  Provisioning Profiles
4.憑證是否有效
可參考 [iOS] iOS Provisioning Portal Certificates
5.Provisioning Profiles 有沒有包含您的裝置
可參考  [iOS] A valid provisioning profile for this executable was not found.




[常見問題]


Q. 無法選擇需要的 Provisioning Profiles

請參考 [iOS]Code Signing Identity 無法選擇需要的  Provisioning Profiles

----------------------------------------------------------------------------

Q. A valid provisioning profile for this executable was not found.

請參考  [iOS] A valid provisioning profile for this executable was not found.

----------------------------------------------------------------------------

Q. 編譯失敗錯誤訊息 CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 6.0'


A. 沒有設定 Code Signing Identity

----------------------------------------------------------------------------

Q. 使用XCODE 更新Provisioning Profiles 資料失敗
Your team has no devices for which to generate a provisioning profile. Please connect a device to use for development, or manually add a Device ID using the Provisioning Portal.
https://developer.apple.com/devcenter/iOS



A .開發帳號內找不到任何一台裝置 只要設定一台裝置即可正常

----------------------------------------------------------------------------

Q. 編譯出現憑證錯誤
Code Sign error: Certificate identity 'iPhone Developer: XXXXXX (XXXXXXXXXX)' appears more than once in the keychain. The codesign tool requires there only be one.


A. 代表 MAC 裡有重複的憑證存在

鑰匙圈存取 -> 登入 -> 刪掉舊的重複憑證(訊息顯示的那個) 就行了
公用密鑰與專用密鑰都要刪


2013/3/1

[iOS] A valid provisioning profile for this executable was not found.

A valid provisioning profile for this executable was not found.



這個錯誤對應該是最常見的 (也最讓人不知道如何是好)
因為XCODE 無法辨識的 Provisioning Profiles 錯誤,都是跳這個警告

  • 憑證/密鑰 錯誤
  •  Provisioning Profiles 內沒有包含你所使用的憑證
  •  Provisioning Profiles 內沒有包含你測試的裝置

要全部重新檢查一次才會知道是甚麼問題

P.S 若是不是使用之前的 Provisioning Profiles 或別人建立的 Provisioning Profiles 
通常是  Provisioning Profiles 沒有包含該裝置 的問題


請參考
[iOS] 關於 Provisioning Profiles 這些事

[iOS] Code Signing Identity 無法選擇需要的  Provisioning Profiles

[iOS] iOS Provisioning Portal Certificates


檢查 Provisioning Profiles 內包含測試裝置

登入Apple開發者帳號

1. 選擇Provisioning
2. 檢查 Provisioning Profiles 使用的 Devices 內有沒有自己使用的 Device 並勾選
3. 若是沒有去 Devices 內建立一個 (非必要)





[相關文章]

[iOS] 關於 Provisioning Profiles 這些事
[iOS]Code Signing Identity 無法選擇需要的 Provisioning Profiles
[iOS] iOS Provisioning Portal Certificates

2013/2/28

[iOS] Code Signing Identity 無法選擇需要的 Provisioning Profiles



專案檔-> Build Settings 搜尋 Code Signing Identity

1. Provisioning Profiles 名稱
2.要求的 Bundle ID (App ID)
3.無法使用的原因(通常下列兩種)



A. profile doesn't match bundle identifier 'xxx.xxx.xxx'

要求的 Bundle ID 和專案設定的 Bundle identifier 不同



B. profile doesn't match any valid certificate/private key pair in you keychains



您的鑰匙圈存取內沒有要求的憑證/密鑰

P.S 必須同時要有憑證跟對應的密鑰才能使用該憑證

可參考 [iOS] iOS Provisioning Portal Certificates




若是使用的是 公司/組織的開發者帳號 有另外一種可能
你的憑證無法使用該 Provisioning Profiles

登入Apple開發者帳號
1. 選擇Provisioning
2. 檢查 Provisioning Profiles 可使用的 Certificate 有沒有自己的 Certificate

2013/2/27

[iOS] iOS Provisioning Portal Certificates

產生憑證請求檔

打開 工具程式->鑰匙圈存取

鑰匙圈存取  -> 憑證輔助程式-> 從憑證授權要求憑證 


填寫電子郵件 一般名稱  (CA 不用填寫) 並儲存到磁碟

P.S 一般名稱 是鑰匙圈內的鑰匙 顯示名稱 要打自己容易識別的名字
若是您有很多憑證(不只一個開發者帳號) 時,會不知道這個憑證使用的是哪一個 


此動作會在鑰匙建立一個 公用密鑰專用密鑰並讓產生 憑證請求檔


產生憑證




  1. 選擇 Certificates
  2. 選擇是開發用還是散播(上架)用
  3. 上傳憑證請求檔


把剛產生出來的憑證請求檔上傳





就會看到憑證已順利在裡面了 但若是您帳號沒有管理權限的話只會一直在 Pending 狀態
需要開發管理者 Approve 你的憑證請求才可以使用


確認狀態為 issued 

下載憑證並執行 即可安裝到鑰匙圈存取 
選擇 鑰匙我的憑證 檢查憑證是否有效



到這裡恭喜您憑證已可使用


P.S 憑證要有效使用一定要有 專用密鑰

所以憑證要讓其他電腦使用一定要匯出 專用密鑰 匯出 P12 格式
再另外電腦再匯入 P12 並下載憑證

若是密鑰遺失就只能重新跑一次流程



[相關文章]

[iOS] 關於 Provisioning Profiles 這些事
[iOS]Code Signing Identity 無法選擇需要的 Provisioning Profiles
[iOS] A valid provisioning profile for this executable was not found.

2012/11/7

判斷來源是透過手機瀏覽器

檢查是否由手機瀏覽器連進來的 在進行對應的動作

http://detectmobilebrowsers.com/


而且提供的語言版本也很多



另外附上另外別的參考資料

JS判断浏览器和手机浏览器

2012/10/26

[Objective-C] switch case 內發生錯誤 expected expression

[問題出現時機]


在 switch case 區段內


  1. 用了太複雜的格式或太複雜的程式
  2. 在case 內定義新變數

會出現錯誤 expected expression

        switch (xxxx) {
            case 0:

                NewClass *obj= nil
                break;


[解決方案]


方法一
在 case 區段內使用 { } 把程式碼包起來
        switch (xxxx) {
            case 0:
            {
                NewClass *obj= nil;
            }
                break;

方法二
將變數定義在switch 外部
        NewClass *obj= nil
        switch (xxxx) {
            case 0:
                [obj doSomthing];
                break;

2012/10/10

[XCode] 使用 Snapshot 快照功能進行專案管理



可由 Xcode 的 Organizer 內  Project 看到 Snapshot (快照) 列表



該功能目的是可以建立時間時當下所有檔案快照,當有錯誤時候或改壞的時候可進行還原

Snapshot 建立
有兩種建立方式
  • 系統自動建立
  • 手動建立
(自動建立,好像是在當專案內有大變化時候系統會自動幫你建立)


手動建立方式
File → Create Snapshot


還原方式
File → Restore Snapshot  

選擇還原點會跳出更改項目
Note 該動作是直接在專案內建內進行還原 跟 Export Snapshot 不同




Note在 Orgznizer 內沒有建立的方式,只有 匯出還原點  (Export Snapshot)


更改Snapshot 位置
File → Project Setting  選擇 Snapshots 標籤


更改 Snapshots location 自訂的位置

2012/9/30

[XCODE] ARC forbids explicit message send of 'autorelease'

ARC forbids explicit message send of 'autorelease'

這個錯誤會發生在
專案使用了 ARC (XCode 4.2 後才有的 Automatic Reference Counting )

但程式碼內 or 外部引用的程式使用了 "autorelease"  會出現的編譯錯誤


解決方案
  • 將程式碼改使用支持 ARC 模式 (推薦)
  • 設定-fno-objc-arc 的 Flag  (常用)
  • 關閉專案內 ARC (除非很熟悉記憶體管理,否則不推薦使用)






1. 將程式碼改使用支持 ARC 模式 (推薦)

但是通常會有一堆錯誤是很正常的


XCODE 內很貼心有一個轉換工具  Edit -> Refactor -> Conveert to Objective-C ARC


然後選擇要轉換的檔案 (只要是需要 ARC 都要打勾)

注意到 有時這個對話框上有個警告標誌告訴我們 target已經是ARC了
這是由於之前我們在Build Settings裡已經設置了啟用ARC
若原本沒有啟用ARC 在這裡做轉換後Xcode會自動幫我們開啟ARC

然後點 Check

然後 Xcode 告訴我們一個不幸的消息,不能轉換,需要修復ARC readiness issues..
必須在屬性面板(Cmd + , ) 內開啟  “Continue building after errors”


然後再轉換一次,一樣跳出錯誤但是錯誤訊息不太一樣
但就可以從錯誤面板使用手動修正


2.設定-fno-objc-arc 的 Flag  (常用)

將檔案設定了 -fno-objc-arc 這個flag 檔案將不使用ARC



3. 關閉專案內 ARC (不推薦使用)
手動調整關閉ARC 讓編譯可以過,但意味著整個專案全部都要手動管理記憶體
以下是無論如何要使用舊專案模式

找到專案根目錄 Build Settings 內搜尋 Automatic Reference Counting 將 YES 改為 No


Note
ARC的最簡單基本原則
不寫 retain , release和 autorelease 三個關鍵字



順便紀錄一下規則 資料來源 ARC(Automatic Reference Counting )技术概述

ARC中的新规则

  • 下面的这些函数:dealloc,retainreleaseretainCountautorelease。禁止任何形式调用和实现(dealloc可能会被实现),包括使用@selector(retain)@selector(release)等的隐含调用。
    你可能会实现一个和内存管理没有关系的dealloc,譬如只是为了调用[systemClassInstance setDelegate:nil] ,但是请不要调用[super dealloc] ,因为编译器会自动处理这些事情。
  • 你不可以使用NSAllocateObject或者NSDeallocateObject.
    使用alloc申请一块内存后,其他的都可以交给运行期的自动管理了。
  • 不能在C语言中的结构中使用Objective-c中的类的指针。
    请使用类类管理数据。
  • 不能使用NSAutoreleasePool.
    作为替代,@autoreleasepool被引入,你可以使用这个效率更高的关键词。
  • 不能使用memory zones.
    NSZone不再需要—本来这个类已经被现代Objective-c废弃。
ARC在函数和便利变量命名上也有一些新的规定
  • 禁止以new开头的属性变量命名。


2012/9/3

Chrome 使用 PrintJob not work (一片空白)


Chrome 更新至 21.0.1180.89 後出現很多問題

Ex
  • Https 下內引用非 https 的JS ,js 內的程式會被檔 (要點右上角的盾牌解鎖)
  • ExternalInterface.call 執行有Open 動作時會被封鎖 (用滑鼠處發也一樣)

不過這個都不是這篇要探討的問題



回到主題 Chrome 使用FLASH 呼叫 PrintJob 的時候會出現一片空白

後來經過反覆測試查詢


只要 要print 的物件 不再可視清單就會印不出來

之前要把非可視清單物件印出來只需要
是把Bitmap addChild 一個new Sprite 就可以解決這問題 

新版chrome 必需要把物件丟到可視清單才可以列印 
(所以就把X Y 定義在很遠的地方 傳送完就馬上移除... ) 但這方法只能說堪用,但可以只用AS解決

範例的程式碼
var clip:Sprite = new Sprite()
clip.addChild(printImg)
clip.y = -2000
stage.addChild(clip) 
printMovieClip(clip) //這行就一般的自訂的 printJob funciton 

stage.removeChild(clip) 
clip= null

另外奶大有提供使用JS 的解決
方法  決解在Chrome裡無法使用 Flash PrintJob 的問題
也是不錯的解決方法

2012/6/26

切換 FlashBuilder 語系

更改 FlashBuilder 語系
其實與 Eclipse 設定方法相同

 找到安裝目錄 FlashBuilder.ini or eclipse.ini
新增或修改

-nl en_US
後面可以代入區域代碼


en_US 英文 (美國)
zh_CN 中文 (中國)
zh_HK 中文 (香港)
zh_TW 中文 (台灣)
....etc

Note
輸入 zh_TW 顯示的是簡體
有一部分的介面都還是英文