xcode 創建模擬器_Xcode編譯WebKit

下載WebKit源碼

1)進入https://webkit.org/

2)點擊頁面的 Get Started 進入新頁面,如下圖所示

5ec068aa9a80d0a0279f3ec4a5627a8d.png

3)點擊 Getting the code 進入新頁面,如下圖所示

b86a8aef194f8f7659157d2a3411cd7d.png

4)在源碼下載頁面,有多種下載方式,包括直接下載代碼zip包,通過SVN下載,通過Git下載。這里選擇使用Git的方式進行下載,在控制臺運行下面的命令。下載量有點大,約6G左右,耐心等待即可,下載完成會生成一個WebKit目錄。

4cc453fad2ec196eb320b6cf888aaa9a.png

Xcode編譯

1)Embedded Builds

下載的WebKit目錄里面有一個Tools/Scripts目錄,這里面有各種腳本,包括使用命令行編譯WebKit的腳本build-webkit,但是使用Xcode編譯的時候用不著它。另一個重要的腳本就是configure-xcode-for-embedded-development,在控制臺運行如下命令:p

sudo?Tools/Scripts/configure-xcode-for-embedded-development

之所以需要這個腳本,是因為iOS屬于嵌入式平臺,編譯給iOS嵌入式平臺的WebKit需要一些命令行工具,上面的腳本就是讓Xcode能夠構建這些命令行工具的。否則,在編譯諸如JavaScriptCore的時候,就會報如下錯誤:

‘com.apple.product-type.tool’,?but?there’s?no?such?product?type?for?the?embedded?platform。

需要注意的是,運行完上面腳本之后,最好重啟一下Xcode。

2)更改Xcode配置

WebKit源碼下載完成之后,用Xcode打開里面的WebKit.xcworkspace。默認情況下,WebKit.xcworkspace里面的各個工程都是macos配置,需要進行更改,?左邊紅框就是需要更改的工程,右邊紅框是更改后的配置。

c7532b1d5e70e405dfdec31701eb4d28.png

3)設置構建產物存儲位置

選擇Xcode的File菜單->Workspace Settings...打開Workspace設置窗口:

e3050c2ec35ef33227b662f6b42efc17.png

?選擇Advanced...按鈕,打開如下窗口,按紅框所示進行配置:

a2b1fcff4137f4007eff5d0b27a4bc37.png

4)編譯

選中All Source選項,選擇一個模擬器,然后點擊Xcode的構建按鈕開始構建。剩下的就是耐心等待,等待激動人心的 Build Success 提示(可能編譯完成后有一個關于MiniBrowser工程的彈窗,直接關閉即可,不影響編譯)。

1be44ca5dfe994055bbe2fc25b7df83b.png

創建調試工程

編譯好WebKit之后,我們的目的當然是進行調試,以便用來學習WebKit的源碼。那么,如何才能讓我們新建的工程里面,使用自己編譯的WebKit.framework,而不是系統自帶的呢?

1)用Xcode新建一個新的Project,示例里面是TestWKWebView,并將這個Project添加到WebKit.xcworkspace。

72d2736dea8c76471d6aa036dddf9269.png

2)設置TestWKWebView的scheme

如下圖所示,點擊Edit Scheme,打開設置窗口

68d43ecccc8c10b6b5fabaf72d4c1bea.png

在Edit設置窗口選擇 Arguments選項,在 Environment Variables里面添加一項:

Name:DYLD_FRAMEWORK_PATH

Value:Path_To_WebKit/DerivedData/WebKitBuild/Debug-iphonesimulator

這里的Path_To_WebKit就是WebKit目錄所在路徑。一個方便的方法是,在Xcode的WebKit工程打開Product目錄,找到WebKit.framework然后Show in Finder,將包含WebKit.framework的目錄復制下來即可。

84cd474900139cf0dac9292e514a10f5.png

做好上面的設置之后,就可以編寫測試程序,然后打上斷點,看是否能夠成功斷在WebKit的源碼里面,?如果你能夠成功進入斷點,那么恭喜你,你已經能夠調試WebKit源碼了。

7591a0f7f735a75efad0d91ed92b6b63.png

?參考鏈接

https://webkit.org/building-webkit/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383024.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383024.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383024.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql iscsi_iscsi共享存儲的簡單配置和應用

1、環境介紹SCSI(Small Computer System Interface)是塊數據傳輸協議,在存儲行業廣泛應用,是存儲設備最基本的標準協議。從根本上說,iSCSI協議是一種利用IP網絡來傳輸潛伏時間短的SCSI數據塊的方法,ISCSI使用以太網協議傳送SCSI命…

request mysql 接口_TP5接口開發

開啟debug調試模式(正式上線建議關閉)config.php// 應用調試模式app_debug > true,設置輸出類型index.phpnamespace app\index\controller;class Index{public function index(){$data [name > steven, age > 24];return json([code > 0, msg > 操作成功, data…

django和mysql寫注冊_Django電商項目---完成注冊頁面和用戶登錄

完成基本的創建項目、用戶注冊、登錄、注銷功能創建Django項目,創建df_user的App創建靜態文件夾static(跟manage.py保持在同一級別下)復制靜態文件(css images js)到static路徑下修改settings.py文件修改templates路徑修改數據庫新添加靜態文件加載路徑Pycharm連接mysql數據庫…

命令行進入指定目錄_VIM學習筆記 操作目錄(Manipulate Directory)

在目錄間移動使用以下命令,可以顯示當前所在的目錄::pwd使用以下命令,在Linux下可以進入HOME目錄,而在Windows下則顯示當前所在目錄::cd使用以下命令,可以進入指定的目錄::cd D:tepm使用以下命令…

mysql cluster雙機_GitHub - sophys/mysqlha: 博客“Mysql-cluster數據庫集群雙機HA研究”測試代碼...

mysqlha本代碼是基于博客Mysql-cluster數據庫集群雙機HA研究所寫的。測試采用的是32位環境,linux環境為debian,如果是其他系列只需修改部分指令即可。mysql-cluster版本位:mysql-cluster-gpl-7.2.7-linux2.6-i686.tar.gz,可自行去…

mysql gtid基礎_MySQL 基礎知識梳理學習(四)----GTID

在日常運維中,GTID帶來的最方便的作用就是搭建和維護主從復制。GTID的主從模式代替了MySQL早期版本中利用二進制日志文件的名稱和日志位置的做法,使用GTID使操作和維護都變得更加簡潔和可高。1.GTID的優點(1)基于GTID搭建主從復制根據簡單。(2)可以確保每…

k8s pod MySQL環境變量_Kubernetes 配置Pod和容器(一)定義容器環境變量

此頁展示了如何給運行在Kubernetes Pod中的容器定義環境變量。開始之前必須有一個Kubernets集群,和一個能和集群溝通的kubectl命令行工具。如果你還沒有集群,你可以用Minikube建立一個集群。給容器定義環境變量當你建立了一個Pod,你可以給你運行在Pod中的…

koa2 mysql 中間件_Koa2第二篇:中間件

第一篇介紹了生成器目錄設計。xyzcoding:Koa2第一篇:詳解生成器?zhuanlan.zhihu.com接下來學習Koa2的中間件。Koa2本身只能算一個極簡的HTTP服務器,自身不內置中間件,但是提供中間件內核。中間件是Koa2的核心,因此需要…

mysql命令行如何建庫_MySQL心得2--命令行方式建庫和表

1.創建使用create database或create schema命令可以創建數據庫。create database 庫名create database if not exists 庫名(創建庫并檢驗創建的庫是否存在,不存在則建,存在就不建了)MySQL不允許兩個數據庫使用相同的名字,使用ifnot exists從句…

python 少兒趣味編程下載_PYTHON少兒趣味編程

章認識Python11.1編程語言和Python11.1.1程序設計和編程語言11.1.2Python簡介21.2Python的安裝41.2.1Windows下的Python安裝41.2.2MAC下的Python安裝81.3個程序HelloWorld111.4開發工具IDLE121.4.1IDLE簡介121.4.2用IDLE編寫程序121.4.3IDLE的其他功能161.5小結18第2章變量、數…

rs485數據線接反_終于有人把RS485通訊的正確接線方式講明白了,網友:這下好辦了...

RS485是一個定義平衡數字多點系統中的驅動器和接收器的電氣特性的標準,該標準由電信行業協會和電子工業聯盟定義。使用該標準的數字通信網絡能在遠距離條件下以及電子噪聲大的環境下有效傳輸信號。RS485使得廉價本地網絡以及多支路通信鏈路的配置成為可能。那么RS485通訊的正確…

騎馬與砍殺python代碼_GitHub - yunwei1237/scottish-fold: 一個關于騎馬與砍殺的劇本制作工具...

scottish-fold一個關于騎馬與砍殺的劇本簡單快速的制作工具前言?在很久以前的時候,也就是剛開始玩騎砍的時候就想著能夠制作一個自己的劇本,用于書寫自己想要的故事。當我懷著遠大的夢想去這么做的時候才發現,原來制作劇本沒有自己想象的那么…

java tomcat 監控_java程序監控tomcat實現項目宕機自動重啟并發送郵件提醒

最近由于老項目頻繁掛掉,由于項目經過多批人之手,短時間難以定位問題,所以只好寫一個監控程序。 時間比較緊半天時間,而且水平有限大神勿噴,有好的方法還請賜教。 1、問題描述:分兩種情況1.1、tomcat 徹底掛…

java靜態類和非靜態類的區別_Java中靜態內部類和非靜態內部類到底有什么區別?...

內部類(Inner Class)和靜態內部類(Static Nested Class)的區別:定義在一個類內部的類叫內部類,包含內部類的類稱為外部類。內部類可以聲明public、protected、private等訪問限制,可以聲明 為abstract的供其他內部類或外部類繼承與擴展&#x…

java寫便簽_如何編寫一個便簽程序(用Java語言編寫)

如何編寫一個便簽程序(用Java語言編寫)熱度:336 發布時間:2011-02-18 11:44:16如何編寫一個便簽程序(用Java語言編寫)因為以前沒有好好學習Java,都搞忘了,請大家原諒,也請你們指導一下,怎么編寫這個程序&…

java 生成log4j_Java log4j配置每天生成一個日志文件 - 永恒ぃ☆心 的日志 - 網易博客...

一、配置屬性文件log4j.propertieslog4j.rootLoggerINFO,stdout,Rlog4j.appender.stdoutorg.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layoutorg.apache.log4j.PatternLayout# Pattern to output the callers file name and line number.log4j.appender.stdout.layo…

java 子進程輸出流_具有輸入/輸出流的Java進程

首先,我建議更換這條線路。Process process Runtime.getRuntime ().exec ("/bin/bash");帶著線條ProcessBuilder builder new ProcessBuilder("/bin/bash");builder.redirectErrorStream(true);Process process builder.start();ProcessBuil…

java中if 運算符_[Java]Java基本語法結構(運算符,流程控制語句,if語句)

1:運算符(掌握)(1)算術運算符A:,-,*,/,%,,--B:的用法a:加法b:正號c:字符串連接符C:/和%的區別數據做除法操作的時候,/取得是商,%取得是余數D:和--的用法a:他們的作用是自增或者自減b:使用**單獨使用放在操作數據的前面和后面效果一樣。a或者a效果一樣。*…

java 變量取值范圍_JAVA中的變量及取值范圍

字節是二進制數據的單位。一個字節通常8位長。但是,一些老型號計算機結構使用不同的長度。為了避免混亂,在大多數國際文獻中,使用詞代替byte。變量:變量的數據類型;變量名變量值數據類型基本型數值型(整數)布爾型浮點型…

java object強制類型轉換_scala?object?轉Class?Scala強制類型轉換

asInstanceOf[T]將對象類型強制轉換為T類型。還是由于泛型存在類型擦除的原因,1.asInstanceOf[String]在運行時會拋出ClassCastException異常,而List(1).asInstanceOf[List[String]]將不會。packageresti.webimportorg.springframework.beans.factory.annotation.Au…