原创 iOS App上架流程(2016)

概述:iOS應用程序上傳AppStore的具體流程 1.打開蘋果開發者中心:http://developer.apple.com 2.如果沒有登錄,先輸入您的開發者賬號及密碼,登錄成功後,點擊網頁右上角 Account標籤,到達如下界面

原创 iOS 關於runtime的那些事

關於runtime的那些事 runtime 簡介 runtime簡稱運行時,程序在運行過程中都會轉成runtime的C代碼執行。OC中的一切都被設計成對象,實際上類的本質也是一個對象,在runtime中用結構體表示。對於oc來說,在編譯

原创 iOS開發之NSLog的使用

我們在調試程序時,經常會使用NSLog函數打印出一些日誌信息。當我們準備發佈程序時,則不希望這樣的調試日誌出現。我們會自定義這個函數,在debug的時候,正常打印出我們所需要的內容,但在release版本時,則關閉日誌輸出。 更多的,我們

原创 安裝測試包(.ipa)到iPhone手機

測試的朋友都會碰到安裝測試包的情況,一般測試包(後綴名.ipa)用於內部人員測試。 目前,我所知道的有兩種安裝方法: 一種是使用iTunes: 1.打開iTunes,選中我的應用,將測試包.ipa拖到應用區 2.拖入後,選中的我的手機圖

原创 關於蘋果開發者賬號的那些事

蘋果開發者賬號大致分爲三種類型:個人、組織(公司和企業)、教育機構。 1、個人賬號: 支付費用 99$/年 是否可上傳到AppStore 是 最大支持iOS設備數量 100臺 申請時需要DUNS碼 否 使用人數 1人 2、公司賬號

原创 iOS開發 正確限制UITextField(UITextView)輸入位數

iOS開發時,有時候我們需要對輸入框的位數做出合理的限制。對於UITextField,可通過監聽UIControlEventEditingChanged 做出合理的位數限制;UITextView則要實現其代理 -textViewDi

原创 iOS 用密鑰對數據加密解密

引言 在iOS App開發中,我們需要對賬戶,密碼等個人私密信息進行加密處理,從而保證用戶信息的安全。那麼可以將這些私密信息保存到鑰匙串(keychain)中,因爲鑰匙串的不可見性,可以保證用戶私密信息的安全。 值得注意的是,將明

原创 刪除Xcode中多餘的證書

前言:在開發過程中,我們導入各種各樣的證書,爲了App真機測試或者在AppStore上架。在Xcode中配置證書的時候,會有許多我們根本用不到的證書,想要找到你需要的開發證書或者發佈證書都不是很方便。 作爲有強迫症的我,廢紙簍中都不允許有

原创 iOS 多線程的實現方式及應用示例

概述 優點: 把程序中耗時的任務放到後臺去處理,如圖片、視頻的下載等;充分發揮多核處理器的優勢,併發執行讓系統運行的更快、更流暢、用戶體驗更佳。 不足: 大量的線程操作會降低代碼的可讀性;大量的線程需要更多的內存空間;當多個線程對同

原创 iOS UIView添加背景圖片

在我們平時的開發中,有時需要給View設置一張圖片做爲背景。我們知道UIView是沒有直接提供這樣的API給我們的,我們可以另闢新徑,達到這樣的目的。 一、先簡單說下用本地的圖片創建UIImage的方式: + (nullable UIIm

原创 iOS 角度與弧度的轉換

<span style="font-family: Arial, Helvetica, sans-serif;">void CGContextAddArc(CGContextRef __nullable c, CGFloat x, CGF

原创 iOS開發之單例使用(宏)

.h文件中 #define SKSingletonH(__className)\ + (__className *)shareInstance;\ .m文件中 #define SKSingletonM(__className)\ \ s

原创 iOS 解決"此證書由未知頒發機構簽名的"辦法

如下圖所示,提示錯誤:此證書由未知頒發機構簽名的 解決辦法:重新下載AppleWWDRCA.cer ,自動導入到鑰匙串中,就哦了! 下載地址:http://developer.apple.com/certificationauthori

原创 iOS開發之HTTP、TCP/IP、Socket

概述      1、網絡層次:網絡由下往上依次爲:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。      2、IP協議對應網絡層、TCP協議對應傳輸層、而HTTP協議對應應用層。      3、Socket則是對TCP/I

原创 iOS常見的面試題詳解

程序題一: @autoreleasepool { for (int i = 0; i < INT_MAX; i++) { SFPerson *person = [[SFPerson alloc