最近更新了 Reveal 2, 發(fā)現(xiàn)以前 Reveal 1 的斷點方式無法使用, 然后我就發(fā)現(xiàn)官網(wǎng)提供了三種使用方式, 但是因為是英文的, 所以我還是整理一下.
通過 CocoaPods 導(dǎo)入
很簡單的方式, 只需要在你的 Podfile 文件添加 pod 'Reveal-SDK', :configurations => ['Debug']
, 然后在終端執(zhí)行 pod update
或 pod install
.
運行 APP, 就可以在 Reveal 中查看你的 APP 界面布局了, 并且只有在 debug 模式下才能查看, 如果是 release 模式則不能.
通過這種方式集成的 Reveal, 可以查看模擬器和真機上 APP 界面布局.
使用斷點的方式導(dǎo)入
-
安裝 Reveal 的 Debugger Commands
安裝前
安裝后
創(chuàng)建Symbolic Breakpoin, 找到添加斷點的地方, 如圖
點擊紅框所示的 "+" 按鈕, 選擇Symbolic Breakpoin
- 編輯斷點
斷點創(chuàng)建以后, 我們右擊編輯斷點, 在 Symbol 處填寫UIApplicationMain
, 點擊Add Action
按鈕添加一個 Action, 輸入reveal load
, 并且勾選Automatically continue after evaluating actions
- 完成后, 再次右擊斷點, 選擇
Move Breakpoint To
, 再選擇User
在模擬器上運行 APP, 即可在 Reveal 中查看 APP 的界面布局
如果你想要在 Reveal 中查看運行在真機上的 APP 界面布局, 那么你需要添加一個運行腳本, 即
Run Script
先選中項目, 然后選中 Target, 再選中 BuildPhases, 創(chuàng)建一個新的Run Script
, 如圖
將這個新的Run Script
重新命名為 Integration Reveal
, 再將如下代碼復(fù)制到下圖中紅框2的位置
REVEAL_APP_PATH=$(mdfind kMDItemCFBundleIdentifier="com.ittybittyapps.Reveal2" | head -n 1)
BUILD_SCRIPT_PATH="${REVEAL_APP_PATH}/Contents/SharedSupport/Scripts/reveal_server_build_phase.sh"
if [ "${REVEAL_APP_PATH}" -a -e "${BUILD_SCRIPT_PATH}" ]; then
"${BUILD_SCRIPT_PATH}"
else
echo "Reveal Server not loaded: Cannot find a compatible Reveal app."
fi
在真機上運行你的 APP, 就可以在 Reveal 中查看了.
注意1: 必須在 debug 模式
注意2: 必須是非越獄手機, 反正我的越獄機是無法弄, 一但用斷點的方式使用 Reveal, APP 壓根兒跑不起來, 非越獄手機實測沒問題
手動導(dǎo)入
- 首先, 你需要將 Reveal 的 framework 導(dǎo)出
將這個 framework 復(fù)制一份出來, 然后將復(fù)制出來的導(dǎo)入到你的項目中.
注意, 此時千萬不要把原文件直接拖入你的項目中, 防止出現(xiàn)手誤把這個 framework 刪除了或改變-
打開項目的
Build Settings
, 找到Framework Search Paths
, 在 Debug 里添加 framework 搜索路徑
注意: 搜索路徑應(yīng)該根據(jù)你自己的實際情況來填寫. "$(PROJECT_DIR)"代表的是項目根目錄.
還有就是, Release 那一行, 不要填寫 RevealServer.framework 的搜索路徑, 如果 Release 那一行被Xcode自動填寫了, 那么刪除它, 原因嘛, 是因為官方希望你在 Debug 的時候使用 Reveal, 當你 Release 時, 不要使用. -
還是在
Build Settings
這里, 找到Other Linker Flags
, 添加-ObjC -weak_framework RevealServer
, 如果已經(jīng)有-ObjC
, 那就不用再寫-ObjC
了. 當然了, 依然只是在 Debug 那一行添加.
繼續(xù)在
Build Settings
里找到Runpath Search Paths
, 添加$(inherited) @executable_path/Frameworks
.
PS: 這個地方是 Reveal 官方指引上寫的, 但是吧, 我實際測試發(fā)現(xiàn)好像 Xcode 會自動填寫, 所以這一步可以跳過
- 在
Build Phases
中創(chuàng)建Run Script
, 命名為Integration Reveal
, 添加如下腳本代碼
export REVEAL_SERVER_FILENAME="RevealServer.framework"
# Update this path to point to the location of RevealServer.framework in your project.
export REVEAL_SERVER_PATH="${SRCROOT}/${REVEAL_SERVER_FILENAME}"
# If configuration is not Debug, skip this script.
[ "${CONFIGURATION}" != "Debug" ] && exit 0
# If RevealServer.framework exists at the specified path, run code signing script.
if [ -d "${REVEAL_SERVER_PATH}" ]; then
"${REVEAL_SERVER_PATH}/Scripts/copy_and_codesign_revealserver.sh"
else
echo "Reveal Server not loaded: RevealServer.framework could not be found."
fi
注意: 腳本中 REVEAL_SERVER_PATH
這個路徑, 應(yīng)該根據(jù)你的 RevealServer.framework 實際的路徑填寫, 比如我的 RevealServer.framework 是放在了 720DEMO
這個文件夾下, 那么我就應(yīng)該寫成 REVEAL_SERVER_PATH="${SRCROOT}/720DEMO/${REVEAL_SERVER_FILENAME}"
, 這個路徑一定要跟你的 RevealServer.framework 一致, 否則是無法使用 Reveal 的
- 運行 APP 就可以用 Reveal 查看界面布局了, 真機模擬器都行.
在APP Extensions 上使用 Reveal
使用步驟和上面三個差不多, 區(qū)別在于項目中 Target 的選擇, 在選擇 Target 的時候我們需要選中我們的 APP Extensions 對應(yīng)的 Target 而不是主程序?qū)?yīng)的 Target.
對于CocoaPods來說, 你需要這么寫
target '你的 APP Extension 對應(yīng)的 Target 名字' do
pod 'Reveal-SDK', :configurations => ['Debug']
end
后記
好了, 就這么多吧, 上面的方式我都實際測試過, 沒有問題. 恩, 除了APP Extension.
關(guān)于越獄機無法用斷點的方式在真機上使用 Reveal, 我咨詢了官方的技術(shù)人員, 不過并沒有解決, 應(yīng)該是越獄行為對手機做了某些操作導(dǎo)致 Symbolic Breakpoin 無法通過, 所以沒辦法, 等官方解決吧.
我最后使用了CocoaPods的方式來使用 Reveal, 我只想說, 真是簡單粗暴啊! 確實很方便. 還有, 我不推薦用手動的方式導(dǎo)入, 太麻煩了有沒有! 我個人推薦用斷點方式來使用 Reveal, 不怎么麻煩也不會對項目造成侵入.
最后的最后, 如果你們有任何的問題, 請去找官方, 因為找我也沒用, 哈哈哈哈哈哈哈.
參考
[Reveal官方使用指導(dǎo)](file:///Applications/Reveal.app/Contents/SharedSupport/Documentation/Reveal%20Integration%20Guide.html)