因為個人用 Sublime Text 3 來寫 tweaks,
但是跟一般用 Xcode 寫 App 比起來,除了沒有自動補完之外,
也沒有在編譯前糾錯的功能。
不過 Sublime Text 的優點就是有很多外掛可以使用,
昨天弄了一整天,終於搞定了。
先來說我的開發環境:
系統跟編譯器還有 SDK 部分是 OS X 10.9 + Xcode 5 + iOS 7.0 SDK
Sublime Text 這邊是 3.0 ,搭配 theos logos 來寫 tweak。
首先,先在 Sublime Text 3 選擇 Preferences > Browse Packages …
然後在終端機 cd 到該目錄,輸入
git clone --recursive https://github.com/quarnster/SublimeClang SublimeClang
git pull && git submodule foreach --recursive git pull origin master
然後編譯 SublimeClang,或者在這邊下載我編譯好的檔案,
解開壓縮之後把兩個 dylib 丟進去剛剛的 SublimeClang/internals 裡面
之後到 Sublime Text 3 的 Preferences > Package Settings > SublimeClang > Settings – Default
找到 options : 加入下面這段
//For logos
"-x",
"objective-c++",
"-c",
"-DTARGET_IPHONE=1",
"-O2",
"-include", "/opt/theos/Prefix.pch",
"-I", "/opt/theos/include/",
//For iOS
"-isystem", "/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/include/",
"-isystem", "/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/include/c++/4.2.1/",
"-I", "/Applications/Xcode.app/Contents/Developer/usr/lib/llvm-gcc/4.2.1/include",
"-arch","armv7",
"-isysroot", "/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk",
"-D__IPHONE_OS_VERSION_MIN_REQUIRED=__IPHONE_4_3",
"-miphoneos-version-min=4.3",
再找到 analyzer_commandline,加入下面這段
//Theos Logos
"/usr/bin/xcrun",
"-sdk", "iphoneos",
"clang++",
最後再找到 analyzer_extensions ,加上
"x",
"xi",
"xm",
"xmi"
就好了
不過這時候 theos logos 會被認為是錯誤,但自動補完的部分是正常的,
這時候你可以選擇發揮無視技能,或者按照接下來的教學做
去 SublimeClang/sublimeclang.py
找到 295 – 299 行,應該長這樣:
errString = "%s%s\n" % (errString, err)
if diag.severity == cindex.Diagnostic.Warning:
warningCount += 1
elif diag.severity >= cindex.Diagnostic.Error:
errorCount += 1
改成這樣
if not err.endswith("expected unqualified-id") and not err.endswith("missing context for method declaration"):
errString = "%s%s\n" % (errString, err)
if diag.severity == cindex.Diagnostic.Warning:
warningCount += 1
elif diag.severity >= cindex.Diagnostic.Error:
errorCount += 1
再找到下面一點點的
add_error_mark(
diag.severityName, filename, f.line - 1, diag.spelling)
改成這樣:
if not err.endswith("expected unqualified-id") and not err.endswith("missing context for method declaration"):
add_error_mark(
diag.severityName, filename, f.line - 1, diag.spelling)
就好了,重要的是主要注意原本的 code 那邊 tab 要空好就行了
參考資料:
在 Sublime Text 3 中使用 SublimeClang 插件
SublimeText 2をiOS向けにカスタマイズ:コード補完,構文エラー表示
SublimeClang user preferences json for iOS + theos