golangdylib的簡單介紹

本文目錄一覽:

怎麼導入 libz.1.2.3.dylib

在iOS9中被系統隱藏了,在iOS9中添加方法:

在項目Target中的Link Binary With Libraries 中

1、首先點擊 「+」

2、顯示搜索添加頁面,在這裡如果搜索之前的libsqlite3.dylib是搜不出來ios9之前的。所以需要點擊 Add Other,出現文件目錄頁面,正常情況這裡去通過Finder也是找不到老的libsqlite3.dylib文件的,因為這個文件是隱藏掉的。所以需要按快捷鍵 CMD+Shift+G (Go to the folder);

3、輸入/usr/lib後,進入隱藏的界面,然後添加你需要的libz.1.2.3.dylib文件。

golang中調用c的正確姿勢

工程結構如上圖所示,我們需要實現的目標是在go文件中調用c文件

foo.c如下:

foo.go如下

foo.h如下:

編譯過程如下:

1、先將c文件編譯為.o文件,然後生成動態鏈接庫.dylib文件

(1) clang -c foo.c

(2 clang -shared foo.o -o libfoo.dylib

2、在上述的動態鏈接庫生成之後,在foo.go中添加動態鏈接命令:#cgo LDFLAGS: -L./ -lfoo

需要注意的是

中間不能有空格

Xcode6的項目放到Xcode7中無法運行?

Xcode7是iOS9了,對程序做了一些調整,給程序猿挖了點坑。

一、iOS9 bitcode

首先最大的問題就是坑貨xcode7,xcode7默認是打開bitcode的,bitcode是蘋果為了解決他自己以後的應用可以隨意更換硬體的處理做的準備也就是arm指令集和x64指令集的問題

那麼我們的工程如果你採用了別人封裝的第三方庫,那麼好了,會爆以下錯誤

ld: 『/UsersFramework/SDKs/PolymerPay/Library/mobStat/lib**SDK.a(**ForSDK.o)』does not contain bitcode. You must rebuild it with bitcode enabled (Xcodesetting ENABLE_BITCODE), obtain an updated library fromthe vendor, or disablebitcode for this target. for architecture arm64

上述這段文字說明了我們的第三方庫不支持bitcode,如果你需要支持,就需要這個第三方庫也支持bitcode。蘋果目前給出的臨時解決方案就好比當初MRC和ARC時候的解決辦法,當初xcode5更新時候默認是工程創建是ARC的,你可以關閉ARC改為MRC,經過了一段時間後,大家都開始使用了ARC,那麼bitcode也一樣,在xcode7時候默認是開啟的,我們需要關閉,那麼如何關閉

我引用了一篇文章的gif圖來做演示

在targets裡面選擇BuildSetting中搜索bitcode,然後改為no就ok了

二、iOS9 https問題

如果在Xcode 9之前使用的時http請求,那麼在XCode 9上編譯的App是不能聯網的,會提示如下錯誤:

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app『s Info.plist file.

修 改方法是要麼使伺服器支持https訪問,要麼關閉https的使用。第一種方法對於個人開發者來說代價還是比較大的,因此推薦使用後面一種方法,具體的 做法是:在工程的Info.plist文件里添加NSAppTransportSecurity字典類型的,添加一個元素:key為 NSAllowsArbitraryLoads,值為YES。

三、iOS 9 使用URL scheme必須將其加入白名單(摘抄)

否則會提示類似如下錯誤:

canOpenURL: failed for URL: “mqqopensdkapiV2://qqapp” – error: “This app is not allowed to query for scheme mqqopensdkapiV2」

修正方法是,Info.plist文件中添加一個key為LSApplicationQueriesSchemes的數組值,裡面包含需要添加白名單的string類型的scheme。特酷吧在項目中使用了qq,微信等分享登錄功能,需要添加的值為:

mqqopensdkapiV2

mqqOpensdkSSoLogin

mqq

mqzoneopensdkapiV2

mqzoneopensdkapi19

mqzoneopensdkapi

mqzoneopensdk

mqzone

weixin

wechat

三、新浪微博的jsonkit在部分機型上面導致崩潰(群友Gemini提供

問題是 程序會奔潰到jsonkit.m void keyObjectISA = ((void **)keys[idx]);這行代碼,因為在os x10.10中,NSString採用了TaggedPointer這項技術,此類型不使用解應用isa來獲取其所屬類,而是通過接下來的三位來查找類表索引的類型,且對象指針最低位置為1。

如何解決:解決方法由群友sun提供參考地址如下

由於taggedpointer類型不能用isa了,就必須修改為object_getClass(keyObject) ,而且在line:2601處也需要做修改

這裡附一個修改過的jsonkit,可以正常使用

四 、原來的dylib後綴名的庫全部修改為libz.tbd

五、報錯 Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/UIApplication.m:3294 (群友sun提供)

在Info.plist中,可以找到:「Main storyboard file base name」 String 「Main」,刪掉這個條目, 再啟動,屏幕變成了黑屏

手動添加window

– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; //全屏window

self.window.backgroundColor = [UIColor whiteColor]; //白色背景

[self.window makeKeyAndVisible]; //

return YES;

}

ok,這個由於更新xcode7報錯已解決!

如果按照上面修改完,發現還在報錯,那麼去看看你的項目是不是加了引導頁

把上面的add方法,變成下面的就好。

這個add方法在xcode7之前是沒有問題的,在xcode7後不能這樣寫了!

六、找不到(丟失).dylib文件,換成.tbd文件而又無法運行,請用下面的方式來解決。

Go to Build Phases Link Binary with Librairies + Add other

Once in the file selection window do “CMD”+Shift+G (Go to folder) and type /usr/lib/

From /user/lib you can add: libz.dylib and more…

Compile and have fun

簡書Xcode7的常見問題

一.Xcode7,iOS9之後傳出來的什麼Xcode有鬼,被植入代碼片段什麼的,可以看看,了解一下

二.bitcode問題–未正確設置可能導致編譯問題。適配iOS9

1、大部分社交平台介面不支持https協議。

問題描述:在iOS9下,系統默認會攔截對http協議介面的訪問,因此無法獲取http協議介面的數據。對ShareSDK來說,具體表現可能是,無法授權、分享、獲取用戶信息等。還可能造成我們的編輯界面里傳http之類的網路圖片的時候,我們的編輯界面不會顯示圖片截圖,解決的辦法或者全面關閉https,允許使用http請求;或者把圖片的域添加;又或者選擇使用https的圖片

解決方案(以下方法2選1):

(1)、暫時退回到http協議。

具體方法:在項目的info.plist中添加一個Key:NSAppTransportSecurity,類型為字典類型。然後給它添加一個Key:NSAllowsArbitraryLoads,類型為Boolean類型,值為YES;

示例

(2)、設置域。可以簡單理解成,把不支持https協議的介面設置成http的介面。

具體方法:

1)、在項目的info.plist中添加一個Key:NSAppTransportSecurity,類型為字典類型。

2)、然後給它添加一個NSExceptionDomains,類型為字典類型;

3)、把需要的支持的域添加給NSExceptionDomains。其中域作為Key,類型為字典類型。

4)、每個域下面需要設置3個屬性:NSIncludesSubdomains、NSExceptionRequiresForwardSecrecy、NSExceptionAllowsInsecureHTTPLoads。均為Boolean類型,值分別為YES、NO、YES。

示例

2、大部分社交平台SDK不支持bitcode。

問題描述:iOS 9新建項目默認需要支持bitcode,而不支持bitcode的SDK會導致無法編譯運行。解決方案:

(1)、暫時關閉對bitcode的支持(建議),方法如下圖

(2)、移除不支持bitcode的平台SDK。

示例

3、添加Scheme白名單

問題描述:在iOS 9下涉及到平台客戶端跳轉,系統會自動到項目info.plist下檢測是否設置平台Scheme。對於需要配置的平台,如果沒有配置,就無法正常跳轉平台客戶端。因此要支持客戶端的分享和授權等,需要配置Scheme名單。

具體方法:

1)、在項目的info.plist中添加一LSApplicationQueriesSchemes,類型為Array。

2)、然後給它添加一個需要支持的項目,類型為字元串類型;

示例

三.ATS 未正確設置可能導致一些網路請求出問題。

WWDC 2015上了解到iOS 9將要求網路請求使用HTTPS協議。我們知道,Apple在安全及用戶隱私方面做了很多工作,包括沙盒機制、代碼簽名、禁用私有API等。而在今年6月份的WWDC 2015上,Apple又提出了App Transport Security(ATS)的概念。這一特性的主要意圖是為我們的App與伺服器之間提供一種安全的通信方式,以防止中間人竊聽、篡改傳輸的數據。這一特性在iOS 9+和OS X 10.11+中是默認的支持項。這一概念的提出,也將意味著Apple將會慢慢轉向支持HTTPS,而可能放棄HTTP。

App Transport Security技術要求

我們先來看看ATS的技術要求(參考App Transport Security Technote):

1)The server must support at least Transport Layer Security (TLS) protocol version 1.2.

2)Connection ciphers are limited to those that provide forward secrecy (see the list of ciphers below.)

3)Certificates must be signed using a SHA256 or better signature hash algorithm, with either a 2048 bit or greater RSA key or a 256 bit or greater Elliptic-Curve (ECC) key.

可以看到服務端必須支持TLS 1.2或以上版本;必須使用支持前向保密的密碼;證書必須使用SHA-256或者更好的簽名hash演算法來簽名,如果證書無效,則會導致連接失敗。

Apple認為這是目前保證通信安全性的最佳實踐,特別是使用TLS 1.2和前向保密。當然,相信Apple也會與時俱進,不斷的修正ATS,以保證網路通信的安全性。

默認配置

在iOS 9+和OS X 10.11+中,如果我們的App使用了NSURLConnection、CFURL 或者NSURLSession相關的API來進行數據通信的話,則默認是通過ATS的方式來傳輸數據。在此配置下,如果我們使用HTTP來進行通信,則會導致請求失敗,並報以下錯誤:

The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

這樣意味著如果使用ATS,將無法支持HTTP協議(我們測試了一下,由於我們的登錄服務是使用HTTP協議,目前在iOS 9下已無法正常登錄)。相信目前還有大量的應用是通過HTTP協議來訪問伺服器的。而要讓所有的應用都轉向支持HTTPS,顯然是一件費時費力的事(與今年年頭所有應用必須支持64位ARM不同,那次只是在客戶端層面,而ATS涉及到服務端,影響面更大)。所以蘋果提供了一種兼容方案,下面我們就來看看如何處理。

自定義配置

考慮到現實因素,我們可能並不想使用默認配置,或者至少需要一個過渡時期。為此,Apple允許我們在Info.plist文件中來自行配置以修改默認設置(Exceptions),下表是一些鍵值及對應的類型和說明:

示例

示例

示例

示例

示例

四.Scheme未正確設置可能導致應用程序間跳轉會有問題

同一中的白名單

五.Requires full screen 未正確設置可能導致應用程序上傳會失敗 提示ITMS-90474 ITMS-90475

示例

原創文章,作者:FLTM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/133747.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FLTM的頭像FLTM
上一篇 2024-10-04 00:00
下一篇 2024-10-04 00:00

相關推薦

  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智慧,Python都扮演著重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28
  • 如何製作一個簡單的換裝遊戲

    本文將從以下幾個方面,為大家介紹如何製作一個簡單的換裝遊戲: 1. 遊戲需求和界面設計 2. 使用HTML、CSS和JavaScript開發遊戲 3. 實現遊戲的基本功能:拖拽交互…

    編程 2025-04-27
  • Guava Limiter——限流器的簡單易用

    本文將從多個維度對Guava Limiter進行詳細闡述,介紹其定義、使用方法、工作原理和案例應用等方面,並給出完整的代碼示例,希望能夠幫助讀者更好地了解和使用該庫。 一、定義 G…

    編程 2025-04-27
  • 2的32次方-1:一個看似簡單卻又複雜的數字

    對於計算機領域的人來說,2的32次方-1(也就是十進位下的4294967295)這個數字並不陌生。它經常被用來表示IPv4地址或者無符號32位整數的最大值。但實際上,這個數字卻包含…

    編程 2025-04-27
  • 製作一個簡單的管理系統的成本及實現

    想要製作一個簡單的管理系統,需要進行技術選型、開發、測試等過程,那麼這個過程會花費多少錢呢?我們將從多個方面來闡述製作一個簡單的管理系統的成本及實現。 一、技術選型 當我們開始思考…

    編程 2025-04-27

發表回復

登錄後才能評論