2010年10月26日 星期二

iPhone 開發筆記08: Setting a Background Color for UIButton

參考來源:
Cocoa Is My Girlfriend » Fun With UIButtons and Core Animation Layers
http://www.cimgf.com/2010/01/28/fun-with-uibuttons-and-core-animation-layers/

步驟:
A. 在 Interface Builder 裡, 設定所使用的 UIButton 的 Attributes TypeCustom.
B. 在 Xcode 的 Resource 裡, 新增 QuartzCore framework, 並在 xxxViewController.h 檔中引入:
import <QuartzCore/QuartzCore.h>

UIButton *button1;
. . . .
@property (nonatomic, retain) IBOutlet UIButton *button1;


C. 在 xxxViewController.m 檔中的 - (void)viewDidLoad: 內加入以下的程式碼:
@synthesize button1;
. . . .
- (void)viewDidLoad {

    [[button1 layer] setCornerRadius:8.0f];
    [[button1 layer] setMasksToBounds:YES];
    [[button1 layer] setBorderWidth:1.0f];
   
    /* set "green border" on the layer passing it a CGColorRef. */
    [[button1 layer] setBorderColor:[[UIColor greenColor] CGColor]];
   
    /* set the background color */
    // Core Animation way
    //[[button1 layer] setBackgroundColor:[[UIColor redColor] CGColor]];

    // UIView way
    [button1 setBackgroundColor:[UIColor redColor]];

    [super viewDidLoad];

}

說明:
1. With this code the layer gets a corner radius of 8.0

2. and the -setMasksToBounds: tells the button's layer to mask any layer content that comes below it in the layer tree. This is necessary in order for the layer to mask off the rounded corners.

3. Finally, set the border width to 1.0 to display an outline around the button.

4. The default color for this border is black. You can change it to anything you like using -setBorderColor: on the layer passing it a CGColorRef (e.g. [[UIColor greenColor] CGColor] would give you a green border).

5. You can set the background color in Interface Builder or in code–whichever you prefer. There are two ways to do this in code. One using the layer and one using the UIView call to -setBackgroundColor.

The main difference between the two is that the layer works with a CGColorRef while the UIView works with a UIColor. It' s a subtle difference, but one that you should know.

2010年10月18日 星期一

iPod Touch 3G JailBreak 4.1.0

One man's poison is another man's pleasure....

1. 備份 ECID: 在 Mac OS X 下, 連結 iPod Touch 並且下載 Umbrella:
http://thefirmwareumbrella.blogspot.com/ 來執行.

2. 備份資料:
(1). 執行 Cydia 的 AptBackup (可用來備份 Cydia 安裝過的軟體清單)
(2). 執行 Cydia 的 AppBackup (備份你所下載的應用程式之存檔與設定)
a. 備份後, 需檢查 iPod Touch 上 /private/var/mobile/Library/Preferences/AppBackup 目錄下的所有檔案(含子目錄下的檔案) 日期是否為最新的. 如果不是的話, 必須利用 sftp 登入到 iPod Touch 裡, 並調整 /private/var/mobile/Library/Preferences/AppBackup 目錄下 檔案與目錄權限為 777 (chmod 777 *.*), 之後再備份一次並檢查日期.

b. 承上, 利用 sftp 把 iPod Touch 上 /private/var/mobile/Library/Preferences/AppBackup 目錄下的 backuptimes.plist 還有 tarballs 資料夾備份到電腦上.

(3). 使用 iTunes 同步並備份 iPod Touch 的資料.

3. Download iPod Touch Firmware : (在 5.(2) 中會用到)
http://www.felixbruns.de/iPod/firmware/
=> 在此使用的版本為: iPod touch 3G (4.1/8B117)

4. 將 iPod Touch 進入 DFU Mode:
(1). 開啟 iTunes 並將手上的 iPod Touch 連接至電腦.
(2). 開啓任何一個應用程式, 並強制關機(同時按著 "主目錄鍵" 及 "電源開關鍵"(稍先) 不放)
(3). 當 iPod Touch 重新啓動後, 放開 "電源開關鍵", 10 秒後, 再放開"主目錄鍵".
(4). 進入 DFU Mode 後及按回復之前, 主機將維持黑屏及不會顯示任何東西.

5. 使用 iTunes 回復 DFU Mode 的 iPod Touch:
(1). Mac 電腦: 按下鍵盤 Option 鍵, 並同時按下 iTunes 裏的回復按鈕.
(2). 彈出提示框後, 選取剛剛下載的 iPod Touch 3G 4.1 官方韌體, 並等侍 iTunes 回應.

6. 回復 iPod Touch 的備份資料並執行一次同步與 Umbrella.

7. GreenPosi0n
(1). 更新 iTunes 到 10.0.1
(2). 下載 GreenPois0n: http://www.greenpois0n.com/
=> 在此採用: Mac 的 gp_mac_rc3_2.zip
(3). 在 iPod Touch 連結 iTunes 下, 先將 iPod Touch 關機, 並且解壓縮 gp_mac_rc3_2.zip 成 greenpois0n.app
(4). 執行 greenpois0n.app, 按下 "jailbreak" , 並按照畫面提示的步驟操作:
a. Press and hold the sleep button (2 sec)
b. Continue holding sleep, press and hold home (10 sec)
c. Release sleep button, continue holding home (15 sec)

8. 執行 iPod Touch 上的 Loader 後便可安裝 Cydia.

9. Cydia 設定.
(1). Cydia 開啟後, 選擇 Developer (No Filters).
(2). 重開 Cydia, 若有軟件更新, 將彈出提示框, 選擇 Upgrade Essential, 再選擇 Confirm.
(3). 注意軟件更新時不要譲主機自動上鎖.
(4). 請再次開啟 Cydia, 按下 Change, 若有軟件更新, 選擇 Upgrade (), 再選擇 Confirm.

10. Cydia 安裝軟體.
(1). OpenSSH: 可在 Mac 上使用 sftp client 的軟體連入 iPod Touch 系統中.
(2). AptBackup: 備份你用Cydia安裝的軟體清單.
=> 安裝後, 可進入 Aptbackup 選擇 restore,來命令你的 Cydia 將你有安裝的軟體,一一的安裝回去.
(因為它檔案存放位置會隨著 iTunes 的備份,存回電腦.)

(3). AppBackup: 備份你所下載的應用程式之存檔與設定.
(4). AppSync for OS 4.1: 讓應用程式 (.ipa / .app) 可直接透過 iTunes 安裝.
a. 開啟 Cydia > MANAGE > SOURCES > EDIT > ADD
b. 輸入 http://cydia.hackulo.us/ > 按下 Add Source 按鈕 > 若彈出提示框, 選擇 Add Anyway 即可.
c. 完成 Source Update 後, 按下 Return To Cydia, 返回 Source, 再按下剛加入的 Sources, 選擇 AppSync for OS 4.1 安裝.
d. 安裝完成後, 請重新啟動主機.

(5). CyDelete: 可直接在桌面刪除從 Cydia 下載的軟體.
(6). USB Drive: 可當成 USB 硬碟來使用.
a. 新增安裝源: http://apt.dmytro.me/
b. 安裝 USB Drive 軟體.

(7). afc2add: 可讓應用軟體( iPhone Explorer / DiskAid )瀏覽到 iPhone 的根目錄.

11. 更改 iPod Touch 的 root 密碼.
(1). 確定已用 Cydia 安裝了 OpenSSH.
(2). 共享 Mac Book Pro 的網路給 iPod Touch:
=> Mac OS X > 系統偏好設定 > 共享 > Internet 共享
(都設定好時要勾選, 此時 Mac 本身可能無法上網)
> 共享來源: 乙太網路; 對使用以下傳輸埠的電腦: AirPort

(3). iPod Touch > 設定 > Wi-Fi > 選擇網路: SnowLeopard (同時查看 IP, ex: 10.0.2.2)
(4). Mac OS X > 終端機 > ssh root@10.0.2.2 (default password: alpine)
=> 如果出現以下訊息: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
代表, 之前有 jailbreak 過不同的版本並曾登入過 iPod Touch,
解決辦法: 先移除(這裡用搬移檔案) Mac 上 .ssh 目錄下的檔案, 再登入一次:
$ cd /Users/lanli/.ssh
$ mv known_hosts known_hosts_back_20101018

(5). 承上, 鍵入 passwd 來輸入新密碼.
(6). 亦可在 Mac 上使用 sftp client 的軟體連入 iPod Touch 系統中.

12 . 檢查 AppBackup 儲存的目錄.
(1). 登入 iPod Touch 後, 到 AppBackup 目錄下, 檢查其下的檔案與子目錄下的檔案日期是否為最新的.
$ cd /private/var/mobile/Library/Preferences/AppBackup
$ ls -al

(2). 如果不是的話, 先執行 AppBackup (按下左下角的 ALL => Backup), 讓他產生該有的檔案.

a. 承上, 調整目錄與檔案的權限.
$ chmod 777 *.* (在 AppBackup 目錄下 )

b. 承上, 並將之前 2. 備份資料: (2). 執行 Cydia 的 AppBackup 所備份的資料, 利用 sftp 傳回 iPod Touch 上(覆蓋舊檔).

c. 承上, 然後在 AppBackup 軟體裡 按左下角的 ALL => Restore

13. 使用 iTunes 同步並備份 iPod Touch 的資料.
=> 主要是用來同步之前安裝了 JB 後才可安裝的軟體 ^^ (Cydia 以外的軟體)