顯示具有 XCode 標籤的文章。 顯示所有文章
顯示具有 XCode 標籤的文章。 顯示所有文章

2011年4月16日 星期六

How to setup QuickSynergy as Client on Mac.

如何設定Mac上的QuickSynergy Client設定。


前言
 QuickSynergy 中所提供的 Mac 版本,在設定其為 Client 時,遇到了些不方便的地方。


原因
先來看看 QuickSynergy 的 Client 設定畫面。


在 Ubuntu 上面的 QuickSynergy, 正常有 Screen name 欄位.



在 Mac 上面的 QuickSynergy, 不太對呀…怎麼沒有 Screen name.
沒有了 Screen name 那怎麼在 Server side 定義呢?!原來是 QuickSynergy 會使用系統的 Local host name 當作 Screen name 連至 server side. 那我們該如何拿到自己的 host name呢?


其實很簡單,打開 Terminal 看一下提示字元前的名稱是什麼,再加上網域xxx (如:.xxx)。


【但小弟一開始沒發現這樣,於是就抓下了原始碼(From Google Project) 上面。自己動手加了顯示 Screen Name】




解法
加了一個元件來顯示目前Macbook中的 Host name.

(一切都只是為了方便於設定啦!)

下載:
執行檔(bin)
原始碼(source code)

後記:
如果想把Synergy 結合在系統的設定選項中,可以參考始用 SynergyKM
狀態能一下就看出來(在狀態列上),相當的方便。推廌始用。

2009年10月19日 星期一

如何替專案新增一個 Target/Product

繼上篇 rename project 後,衍生出這個主題,如何在現有的專案中再新增一個 target 及 product.
為了在專案開發中,不同客戶需要有不同的 Application Name, Version, Resource 等需求。
不想再分出額外的 Code Base 又想符合客戶需求,我決定採用這方式來實作。

或許,使用 compile option 是最常看到的方式。但小弟我實在太懶惰了,就用這種空間換取時間方式達成…
  1. 開啟 專案,在 Targets 的目錄中 Duplicate 原有的 target. (會產生 target-name copy 的項目)
  2. 在此 target-name copy 的項目上進入 Get Info 選單。
  3. 在 info window 中選取 "Build" page, 其中有個項目名稱為 Product Name,將它改成想要的名稱。
  4. 同時也修改 info.plist File 的名稱 (target-name copy).plist 置換為 (new-app name).plist
  5. 在 info window 中選取 "General page, 將 Name: 改成想要的名稱 (new-app name)。
  6. 回到 Xcode 主視窗中 尋找 (target-name copy).plist 將名稱改為 (new-app name).plist
  7. 開啟 (new-app name).plist

    
    
     CFBundleDevelopmentRegion
     English
     CFBundleExecutable
     new-app name
     CFBundleHelpBookFolder
     new-app name Help Folder
     CFBundleHelpBookName
     new-app name Help
     CFBundleIconFile
     
     CFBundleIdentifier
     com.my.Appkit.new-app.name
     CFBundleInfoDictionaryVersion
     6.0
     CFBundleName
     new-app name
     CFBundlePackageType
     APPL
     CFBundleSignature
     ????
     CFBundleVersion
     2.2.13.1
     NSMainNibFile
     MainMenu
     NSPrincipalClass
     NSApplication
    
    
    
    修改 CFBundleExecutable, CFBundleHelpBookFolder, CFBundleHelpBookName , CFBundleIdentifier, CFBundleName

  8. 複製一份 .plist 名字訂為 (new-app name).plist
  9. 複製一份 help folder 及 readme 名字訂為 new-app name Help Folder 及 new-app name Help
這樣設定完後,在左上 Target 的選項中就會出現 "new-app name", 選擇它然後 Re-Build 我們就可以在build folder 中找到新的應用程式了。

有發生任何奇怪的問題,歡迎來討論看看。
謝謝。

2009年7月15日 星期三

如何替 XCode project(專案)改名

出處:http://aplus.rs/cocoa/how-to-rename-project-in-xcode-3x/

因為抓了 AnchorUSB sample 來改成自己要的 Driver, 之後想要換成另一個有義意的名字,
上網找了這一篇,幫他做點中文化,讓不愛看英文的人,能快速地就知道怎麼變更專案名稱。
底下都是些手動操作的步驟,

  1. 先做個備份的動作
  2. 進到欲修改的目錄,把 .pch 及 .xcodeproj (Xcode2 應該是只有後面這個)
  3. 刪除 build 目錄
  4. .xcodeproj 其實它是個封裝檔,進到封裝檔中,修改 .pbxproj (它是個XML檔案內容)
  5. 在.pbxproj 中把所有的舊名稱更換為新的名稱,並別忘了存檔。
  6. 修改 .plist 的檔名為新的名稱。
  7. 再使用Xcode 開啟專案,應該可以看到product 目前中紅色字樣的檔案。
  8. 試試 clean all/build是否可成功build出APP.
  • 目前,自己在換名稱的過程中,有必須再修改修改 .plist 檔案中 CFBundleExecutable 相對應的新名稱,之後才能順利執行應用程式。
如果 有遇到 Rename 不順利的情況,再把錯誤訊息 貼上來。
我們再來研究看看怎麼解決吧!Enjoy it~~

2009年7月1日 星期三

使用 Cocoa 建構 Hello World!!

在此分享如何使用 Xcode3 建構一個Cocoa Application.
例子當然是世界名著 Hello world. 如果底下說明有不正確的地方,還請麻煩告知。

當然 XCode3 要先裝好…然後打開它點選一下New Project吧!

1. 我們這次要建構一個Cocoa Application,如下圖,

選取之後我們就命名它為Hello World, 及我們所要擺放資料夾的位置。
(這個步驟就自行發揮)

2. 接著我們可以見到XCode 的主畫面如下,
紅色字體的部份就是我們以後的Hello World application.
如果有成功的build project 就可以見到它會轉變為黑色的字體。


3. 我們先必需在這個Application中新增一個自己的Subclass,
在Class 資料夾上面按右鍵,選取Add -> New File.


4. XCode 會要求我們選擇所需要的種類的檔案,我們這次選取 Objective-C Class
因為小弟一直都習慣使用C, Objective-C 對我而言是個比較快可以入門的方式。

5. 接著我們必需命名我們的檔名,通常檔名即我們Class 的名字,
在這邊我們給它為"appCntrl", 即為 Application Controller


6. XCode 的部份先告一段落,我們從XCode 中選取 MainMenu.xib(或 MainMenu.nib)
其實是指同樣的東西,以後有機會再來討論中間的差異。
雙擊 xib 後,會帶出Interface Builder,這是決定 Application Layout的工具,
其中可以看到如下圖的視窗,然後我們必需從Library 中拉NSObject至這個window中,
它會生成一個"Object"的圖示。


6. 再來要對這個"Object"做些設定的動作,先選取 "Object"圖示,然後到Inspector window中,
點選 i 這頁後,在上方Class 的部份,我們打入我們的"appCntrl"。
(如果找不到,可以試著做看看從File底下Read Class files的動作後,再來找看看)


6. 接著這個部份就自行發揮,在Window 上面加上Label & Button,如下圖,


7. 有了可收事件 跟顯示資訊的元件後,我們回到inspector, 先點我們新加的Objec, 再至 i 這個頁面,
我們在Outlet & Action 這兩個部份各加入ID,名稱的部份是可以變更的。(這部份我並沒有修改)
在最底下Name 的欄位填入"appCntrl" 這樣可以識別至XCode中的appCntrl Class.
做完上面的設定後,至File 底下執行 Write class file 的動作,
它可能會問是是要replace 還是merge 這個就見人見智了。

/// 小說明一下,這個動作會將剛新增的 Oulet/Action 加到 appCntrl.h & .m 檔案中。
/// 你可以換成在Xcode 中自己手動新增,然後在Interface Builder 中從read class file的動作中讀進來。

8. 在Window 上面我們配置了 Label & Button 兩個元件後,
我們必需把它們跟自己新增 appCntrl Class 中的 Outlet 及 Action 做個連接。

/// 如果你把Outlet 想像成 output, Action 想像成 input,就可以理解成,
/// 我們會從 Button 收下mouse click 的事件,然後傳到 appCntrl Object,
/// 經過我們的處理後,再把資訊呈現至 Outlet 上面。
/// (使用 appCntrl Object的原因,是Object 為實體,Class 只是個宣告類別)

/// 那連接的動作如何完成,如果是A要丟東西給B ,就選取A 按下Control 鍵拉至B 上面。
/// 如下面的動作,選取 Button 按下 Control 拉至 appCntrl ,
/// IB(interface builder)會跳出視窗要求選取處理事件的 "Method" (也可看成Funtion啦)
/// 當然我們就選取自己新增的 myAction1 來處理這個事件。

同樣的方式 我們拉appCntrl 至Label 上面,把它指定為 myOutlet1.

9. 在inspector window 上面 我們可以看到完成的結果。


10. 在IB 存檔完,它的工作就先告一段落了,接下來要自己動手打點程式了。
(終於有程式了...)

先來看看appCntrl.h 的內容,
#import <Cocoa/Cocoa.h>
@interface appCntl : NSObject {
    IBOutlet id myOutlet1;
}
- (IBAction)myAction1:(id)sender;
@end
/// 這個部份,就是剛我們在IB做完那些動作,按下 Write class file就會幫我們加進來的。
/// 如果一開始在這邊自己動手加程式,也可以反過來在 IB 用 read class file 放進 IB.
/// 小弟比較懶惰~~所以我選擇打字比較少的動作。

/// 不是說要打些程式碼嗎?怎麼上面不需要…嘿嘿…
/// 接下來在 appCntrl.m 中我們就就要輸入底下這些東西…
找到myAction1: (id)sender { } 這個段落中,加入你所沒有那段程式。
#import "appCntl.h"
@implementation appCntl
- (IBAction)myAction1:(id)sender {
    static Boolean shownHello = FALSE;
    
    if (FALSE == shownHello) {
        [myOutlet1 setStringValue:@"Hello world!"];
        shownHello = TRUE;
    }
    else {
        [myOutlet1 setStringValue:@""];
        shownHello = FALSE;
    }
}
@end
/// 這邊先不解釋這些 有點像C 又不太像C 的 Objective-C 的語法。
/// 小弟只想先快速地建構起一個hello world 示範程式。

打完程式後,我們按下 Build & Go 就等著程式跳出來囉!
(如果沒有Compiler error 的話,真的不幸跑出來的話,再把msg 貼上來,再來看看怎麼解)

首先是這樣的畫面,


然後按下Button 後,"Hello World!!"就會顯示
再接著按一下Button ,Hello World 就消失不見,一直重覆做出現不見的事情。
(有點小白痴,但它可以動了。:D)
希望 這篇有幫到你了解整個建構Application 的流程,
當然中間 Objective-C的那段程式碼沒有解釋,先留待下回小弟充板面的內容吧!

/*
** 另外,appCntrl & appCntl 是都指一樣的東西,因為小第太懶的再重新抓一次圖
** 但又覺得名字應該用 appCntrl 比較適合,所以在做的時候,記得用一樣的名稱。
*/


最後,上面步驟,或是說明有不正確的地方,還請教導一下。因為我也是新手啦!
哈哈哈~~!! 祝大家玩的愉快。