Tag: xcode

Git .gitignore file for Xcode projects

Posted by – June 27, 2013

最近才開始整理一些在寫 Obj-C 時當作測試用的範例程式碼,想丟去 GitHub 作個紀錄。

因為這樣才開始在 Xcode 裡使用 Git。雖然 Xcode 本身有整合 Git,但是那個整合還蠻陽春的,連 .gitignore 要怎麼設定都沒點提示。

.gitignore 是 Git 程式碼管理系統裡用來指定哪些檔案不需被追蹤用的文字檔。

看在 Xcode 專案裡的檔案分佈,哪些要忽略還真不容易分辨。一樣是在 StackOverflow 看到幾個解答,在這筆記一下。

# Xcode
.DS_Store
*/build/*
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
profile
*.moved-aside
DerivedData
.idea/
*.hmap

這樣再看 Xcode projects 就清爽多了。

Update Jun 28, 2013

另一種寫法

# Exclude the build directory
build/*

# Exclude temp nibs and swap files
*~.nib
*.swp

# Exclude OS X folder attributes
.DS_Store

# Exclude user-specific XCode 3 and 4 files
*.mode1
*.mode1v3
*.mode2v3
*.perspective
*.perspectivev3
*.pbxuser
*.xcworkspace
xcuserdata

iOS: Disable Automatic Reference Counting for Some Files

Posted by – June 18, 2013

開發 iOS 所使用的 Objective-C 語言隨著 APP 生態發展,也變成一門挺熱門的語言。相對地,其發展也進步許多。

Apple 於 2011 年才在 Objective-C 中導入了 Automatic Reference Counting (ARC) 機制,做為自動記憶體管理的解決方案。在 ARC 出現之前,Obj-C 中記憶體釋放完全是由開發者操作的,對於慣用 script 語言的我來說相當的不習慣,而且也覺得很囉嗦。我偏好 PHP, Python, Ruby 這類可以寫得很簡潔,專注在我要解決的問題與需求上的語言。從 C 演化來的 Obj-C 宛如火星文一般。

所以我是很習慣在開 Xcode 專案時使用 ARC 機制的,可以不用寫 release 方便許多。我連 @synthesize 都沒在寫的。

前面扯這麼多,當然是在鋪 ARC 的梗。開發過程中常會用到第三方的 Library 或 Example code 來加速開發或完成某些外部資源串接。這些第三方的 code 有許多仍是用 non-ARC 模式開發的 (就是手動管理記憶體)。但是專案開了 ARC 模式後編譯 non-ARC code 會掛掉。

xcode-non-arc-error

解決方法是更改編譯設定。在 Xcode 點選 TARGETS -> Build Phases,在 Compile Source 可以加上編譯參數。為 non-ARC 的程式加上 -fno-objc-arc 指定不使用 ARC。

xcode-fno-objc-arc

這樣編譯可以過關了。

如果是反過來要在 non-ARC project 中指定使用 ARC 的話,參數是 -fobjc-arc

How to know if Xcode iOS project is using ARC?

Posted by – June 18, 2013

基本問題,如何查詢 Xcode 的 iOS 專案是否有使用 ARC (Automatic Reference Counting)?

在 Xcode 中點選 Target -> Build Settings -> 搜尋 automatic,就會看到 Objective-C Automatic Reference Counting 是 YES 還是 NO 了。

xcode_check_is_arc_on

iOS: 尋找模擬器的暫存路徑

Posted by – June 3, 2013

在 iOS APP 的開發過程,大量依賴 Xcode 內建的模擬器來做雛型的測試。其中也需要知道文件的狀態變化是否如預期一般運作。

但是模擬器的文件暫存路徑會有一組 UID 亂數,當手上的專案一多就分不出來是哪個資料夾了。可以用以下方法取得該 App 的文件路徑。

NSLog(@"%@", [[NSBundle mainBundle] bundlePath]);

結果如下:

/Users/filework/Library/Application Support/iPhone Simulator/6.1/Applications/642CB434-53D0-440A-9BB4-A5E1801D36EE/qxFMDB.app

若要列出目錄下的檔案,用以下方法。

NSFileManager *fm=[NSFileManager defaultManager];

NSString *path=[[NSBundle mainBundle]bundlePath];

NSArray *info=[fm contentsOfDirectoryAtPath:path error:nil];

NSLog(@"list:%@",info);

執行結果如下:

list:(

"Default-568h@2x.png",

"Default.png",

"Default@2x.png",

"en.lproj",

"Info.plist",

"Main.storyboardc",

PkgInfo

)

 

iOS: FMDB with ARC Semantic Issue

Posted by – May 28, 2013

身為一個 iOS 界的菜菜子,很多元件的使用並不是很熟悉。最近有個案子需要跟 SQLite 打交道,FMDB 是一套頗受推祟的 SQLite wrapper,可以簡化 SQLite 的操作。

FMDB on Github 下載套件。解壓縮後將 src 資料夾加入 XCODE 專案就可以使用了。當然,別忘了要加 libsqlite3.dylib

不過久久沒用 FMDB,一按下 compile 就爆了.... 噴出四個 Arc Semantic Issue。

compile error

呃.... 喔,我忘了要移除 src/fmdb.m 這個檔案.... 移除掉再重新編譯就可以了。

Xcode “PCH file built from a different branch” Error

Posted by – April 29, 2013

最近更新 Xcode 開發工具到 4.6.2 版後,編譯一些之前寫的舊程式會出現如下的錯誤。

PCH file built from a different branch ((clang-425.0.27)) than the compiler ((clang-425.0.28))

xcode-pch-error

看來這是 Xcode 4.6.2 所造成的問題,根據官方文件說明,只要選擇 Xcode > Product > Clean 後就可以正常編譯了。

xcode-product-clean