【Xamarin挖牆腳系列:Xamarin.IOS機制原理剖析】

原文: 【Xamarin挖牆腳系列:Xamarin.IOS機制原理剖析】

【注意:】團隊里老是有人反映卸載Xamarin,清理不徹底。以前寫過如何徹底卸載清理剩餘的文件。今天寫了Windows下的批命令,MAC下的Shell腳本。html

Windows 批:git

echo 'please run it as windows Administartor...'

rd /s/q "C:\ProgramData\Mono for Android"
rd /s/q "C:\ProgramData\MonoTouch"
rd /s/q  "C:\Users\admin\AppData\Local\Xamarin"
rd /s/q "C:\Program Files (x86)\MSBuild\Xamarin"
rd /s/q "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Xamarin"


echo 'del /f/s/qete Xamarin over.....'

pause

 Mac Shell:github

rm -rf ~/Library/MonoTouch
sudo rm -rf /Library/Frameworks/Xamarin.iOS.framework
sudo rm -rf /Developer/MonoTouch

保存爲******.sh ,而後去命令終端運行便可。(記住加權:chmod +x *****.sh)windows

 

------------------------------------------------割了---------------------------------------------------------緩存

 

因爲蘋果的限制,IOS系統中不容許動態解析IL代碼並執行,這跟蘋果的程序安全機制有關係。IOS的程序都是運行在安全沙盒中,不容許在運行過程當中動態加載分析執行代碼。安全

因此,Xamarin採用的是 AOT編譯機制。Android以JIT方式編譯,而經過Xamarin編譯後產生的文件爲原平生臺的ARM機器碼,而且,Android和iOS皆爲1對1的方式對應至原生SDK。bash

生成的對應的平臺的機器碼是否是就是跟原生程序同樣了?既然是吧本機的程序集文件 扔到了Mac下編譯的,那確定是對應平臺的原生代碼了。因此,跟用OC開發的是同樣的,只不過Xamarin轉化了,估計體積略大,有冗餘!app

 

http://www.mono-project.com/docs/advanced/aot/post

Mono的官方文檔解釋:ui

The Mono code generator can operate in two modes: Just-in-Time compilation or JIT, and Ahead-of-Time compilation or AOT.

AOT compilation works in two stages. The first stage consists of precompiling the assemblies. As of Mono 1.2, this is a manual process that individual deployments must do. The second stage is automatic, the Mono runtime will automatically load any precompiled code that you have generated.

 

-----------------有關沙盒機制------------------

原文:http://blog.csdn.net/totogo2010/article/details/7669837

一、iOS沙盒機制

 iOS應用程序只能在爲該改程序建立的文件系統中讀取文件,不能夠去其它地方訪問,此區域被成爲沙盒,因此全部的非代碼文件都要保存在此,例如圖像,圖標,聲音,映像,屬性列表,文本文件等。

 1.一、每一個應用程序都有本身的存儲空間
 1.二、應用程序不能翻過本身的圍牆去訪問別的存儲空間的內容
 1.三、應用程序請求的數據都要經過權限檢測,假如不符合條件的話,不會被放行。
     經過這張圖只能從表層上理解sandbox是一種安全體系,應用程序的全部操做都要經過這個體系來執行,其中核心內容是:sandbox對應用程序執行各類操做的權限限制。

 

 

二、打開模擬器沙盒目錄

下面看看模擬器的沙盒文件夾在mac電腦上的什麼位置。

文件都在我的用戶名文件夾下的一個隱藏文件夾裏,中文叫資源庫,他的目錄實際上是Library。

2.1 方法一、能夠設置顯示隱藏文件,而後在Finder下直接打開。設置查看隱藏文件的方法以下:打開終端,輸入命名

 

顯示Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true

隱藏Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false

輸完單擊Enter鍵,退出終端,從新啓動Finder就能夠了
重啓Finder:鼠標單擊窗口左上角的蘋果標誌-->強制退出-->Finder-->

如今能看到資源庫文件夾了。

 

打開資源庫後找到/Application Support/iPhone Simulator/文件夾。這裏面就是模擬器的各個程序的沙盒目錄了。

2.2 方法二、這種方法更方便,在Finder上點->前往->前往文件夾,輸入/Users/username/Library/Application Support/iPhone Simulator/  前往。

username這裏寫你的用戶名。

三、目錄結構

默認狀況下,每一個沙盒含有3個文件夾:Documents, Library 和 tmp。由於應用的沙盒機制,應用只能在幾個目錄下讀寫文件
Documents:蘋果建議將程序中創建的或在程序中瀏覽到的文件數據保存在該目錄下,iTunes備份和恢復的時候會包括此目錄
Library:存儲程序的默認設置或其它狀態信息;

Library/Caches:存放緩存文件,iTunes不會備份此目錄,此目錄下文件不會在應用退出刪除

tmp:提供一個即時建立臨時文件的地方。

 

iTunes在與iPhone同步時,備份全部的Documents和Library文件。

iPhone在重啓時,會丟棄全部的tmp文件。

 

咱們建立一個IosSandbox的項目來展開沙盒和文件讀寫等操做的練習。

建立後找到模擬器上對應的目錄,

這是目錄全展開了。

  

這是上面提到的三個目錄 :Documents、Library、 tmp

下篇介紹目錄路徑獲取和文件操做

 

例子代碼:https://github.com/schelling/YcDemo

著做權聲明:本文由 http://blog.csdn.net/totogo2010/原創,歡迎轉載分享。請尊重做者勞動,轉載時保留該聲明和做者博客連接,謝謝
相關文章
相關標籤/搜索