iOS開發--開發經驗和解決方案(更新添加.dylib方案)

一. 重新創建項目,設置賬號運行,突然出現下面的情況:

Bug展示

我來簡單的翻譯一下最重要的:
Your maximum App ID limit has been reached. You may create up to 10 App IDs every 7 days
你的最大限制應用程序ID。你可以每7天創建10個APP IDs

------------我是一個可愛的分割線------------

也就是說,你的當前的開發者賬號在創建APP IDs的有效期是7天,同樣的,在7天內的最大飽和創建數量是10個.(我是這么理解的)
這里算是一個坑,針對XCode7的改變之一,因為特別是針對開發初學者而言,需要創建多數demo用來調試程序,功能寫好了,添加到相應的程序中,這里的限制顯然是為了蘋果開發者文件的資源最優化.
ps:蘋果現在是越來越矯情

  • 問題出現了,該怎么解決呢,我采用比較笨的方案,當然也是可行方案:

將自己每一個創建項目的(必須通過自己或者相關的賬號)Bundle Identifier記錄下來,怎么記錄都行,我是用印象筆記記錄的,等到在創建項目的時候出現這樣的問題,直接使用之前自己創建的Bundle Identifier就行了.

Bundle Identifier

二. XCode亂七八糟的碎碎念

先來個截圖

碎碎念

為了方便用戶搜索,現在貼出輸出代碼:

2016-10-17 17:17:12.846456 ChildDoByFarther[10287:907310] subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
2016-10-17 17:17:12.849892 ChildDoByFarther[10287:907310] subsystem: com.apple.UIKit, category: HIDEventIncoming, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
2016-10-17 17:17:12.857289 ChildDoByFarther[10287:907305] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 1, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0, enable_private_data: 0
2016-10-17 17:17:12.869714 ChildDoByFarther[10287:907269] subsystem: com.apple.UIKit, category: StatusBar, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
2016-10-17 17:17:12.889922 ChildDoByFarther[10287:907269] subsystem: com.apple.BackBoardServices.fence, category: App, enable_level: 1, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0, enable_private_data: 0

這里呢,其實是XCode8更新后輸出的XCode的日志,反正我是看不懂,目前為止對我而言無關緊要,要是有看得懂的可以私信我研究研究.
好的,接下來,說一下解決方案,目前為止的可行解決方案修改配置(直接上圖來的直觀):

  1. 在XCode的左上角點擊項目名稱,出現如下:


    進入配置
  2. 選擇Arguments中的Environment Variables,并點擊+號:


    選擇配置相關
  3. 在Environment Variables下邊添加:OS_ACTIVITY_MODE, value值設置為disable...........添加后點擊Close


    添加配置
  4. 完美解決


    完美

三.iOS項目中的中文字符查找

1.打開”Find Navigator",并且將搜索方式切換搜索模式到 “Find > Regular Expression”,如下圖
選擇查找方式.png
2.輸入查找信息
OC輸入:@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?" 
Swift輸入:@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?"
查找內容.png

效果展示如上圖查到的結果一樣.

備注,在參考網絡上的解決方案,發現可以根據正則表達來解決這個事情,但是,由于本人對正則方案不是很了解,下面貼出解決方案,大家有興趣的可以參考參考:

如果你跟我一樣嫌NSLocalizedString的comment礙事 也可以用正則替換掉
Find NSLocalizedString\((@"[^\)]*?")\s*,\s*@"[^\)]*"\s*\)
Replace With NSLocalizedString\($1, nil\)

四.評論的坑:屏幕的多點觸控導致的UIButton和UITextField均相應

說明:這是我在開發中,點擊cell可以對評論進行回復或者舉報,采用蘋果原聲的UIActionSheet觸發事件,評論區域采用自定義View,添加UITextField.在非正常操作中,比如長按cell,這時候再點擊UITextField,此時UITextField是可以相應鍵盤彈起來的,但是,再松開長按cell的點擊的手,此時cell的觸發事件也會相應,這樣必然是不對的.
下面是錯誤視頻:


錯誤設定.gif
直接上解決方案:

思路:采取NSTimeInterval記錄按下和抬起兩個事件觸發的時間,并通過這個差值考慮觸發事件.
規定:考慮到人性主義和人體工學,選擇0.5s時間差為有效觸發事件

1.創建實例變量,記錄兩中不同的點擊觸發事件的時間
  //保存長按的時間差
    NSTimeInterval  _timeInterVal1;
    NSTimeInterval  _timeInterVal2;
2.給UIButton添加兩種觸發狀態
// 點擊
[_reverBtn addTarget:self action:@selector(onReverBtnTapStart:) forControlEvents:UIControlEventTouchDown];
// 離開
[_reverBtn addTarget:self action:@selector(onReverBtnTapFinish:) forControlEvents:UIControlEventTouchUpInside];
3.再開始點擊的觸發事件的方法,記錄開始電機的時間:
-(void)onReverBtnTapStart:(UIButton *)sender {
    _timeInterVal1 = [[NSDate date] timeIntervalSince1970];
}
4.在結束點擊的觸發事件的方法中,記錄結束點擊的時間,并根據這個時間差進行事件的處理方法:
-(void)onReverBtnTapFinish:(UIButton *)sender {
    _timeInterVal2 = [[NSDate date] timeIntervalSince1970];
    if(_timeInterVal2 - _timeInterVal1 < 0.5)
    {
        if ([_delegate respondsToSelector:@selector(commentCell:didTapRevertComment:)]) {
            [_delegate commentCell:self didTapRevertComment:_comment];
        }
    }
    else if(_timeInterVal2-_timeInterVal1>3.0)
    {
        return;
    }
}

五.數據庫的升級(FMDB)

實在不知道開頭怎么寫,先這樣吧.
數據庫升級,對本地數據保存有著不可或缺的重要性,雖然移動開發針對的更多是功能性和展示性的東西,但是為了增加用戶體驗,會獲取到一些數據保存起來,比如首頁的信息緩存等等,數據庫的使用就不在多說了,要是不明白或者不了解,可以看看關于數據庫方面的東西.
為了方面使用,采用了FMDB,這是個比較好的封裝的數據庫第三方.
不多說直接上代碼:

1.創建靜態數據庫隊列
static FMDatabaseQueue *_queue;
2.創建版本號

版本號為了方便啟動,建議以整形的數據進行保存

NSString * const currentHPCacheToolVerson = @"2";
3.在initialize方法中創建數據庫的基本信息

這里面主要是根據FMDatabase中的userVerson進行版本的判斷,初始化版本的時候,默認是0,這里就方便了第一次安裝和老用戶,因為在當前存在數據庫版本升級的版本之前,都是0,這里我們把0作為初始版本,即初始化創建的表和相關的字段.

+ (void)initialize { 
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"homeData.sqlite"];
    _queue = [FMDatabaseQueue databaseQueueWithPath:path];
    [_queue inDatabase:^(FMDatabase *db) {
        if (db.userVersion == 0) {
            [db executeUpdate:@"create table if not exists t_homeGroup        (id integer primary key autoincrement, homeGroup      blob);"];
            [db executeUpdate:@"create table if not exists t_videoInfos       (id integer primary key autoincrement, videoInfo      blob)"];
            [db executeUpdate:@"create table if not exists t_homeGroupDetial  (id integer primary key autoincrement, groupId        text, homeGroupDetial blob);"];
            
            [db executeUpdate:@"create table if not exists t_paintComics      (id integer primary key autoincrement, paintComic     blob, creatTime text, userId text);"];
            [db executeUpdate:@"create table if not exists t_dynamics         (id integer primary key autoincrement, dynamics       blob, creatTime text, userId text);"];
            [db executeUpdate:@"create table if not exists t_discoverTopics   (id integer primary key autoincrement, discoverTopics blob, creatTime text, userId text);"];
        // 這里需要注意的是,在創建完成之后,需要講創建后的版本設定為1,這里是考慮到老用戶和新用戶的問題
            [db setUserVersion:1];
        }
           // 在的設定完初始版本后,進行數據哭的判斷更新
            [self updateSQL];
    }];
}
4.版本更新,這里也是作重要的一個部分

這里做的是匹配版本號,根據當前版本號與預期版本號進行對比,并將版本號對應的更新寫入到swich中,如果當前更新完成后,版本號與預期版本號相等,則break,如果不相等(小于),則繼續升級.當然,有很多朋友更喜歡寫成遞歸的形式,考慮到理解性方面,我還是采用swich方式給大家講解吧.

- (void)updateSQL {
    if (db.userVersion < [currentHPCacheToolVerson integerValue]) {
                // 更新數據庫
                [self updateDBWithOldDBVerson:db.userVersion db:db];
    }
}

+ (void)updateDBWithOldDBVerson:(int32_t)verson db:(FMDatabase *)db {
    switch (verson) {
        case 1: {
            // DO 添加數據庫中表的字段
            [db executeStatements:[NSString stringWithFormat: @"ALTER TABLE t_homeGroup       ADD creatTime text"]];
            [db executeStatements:[NSString stringWithFormat: @"ALTER TABLE t_homeGroup       ADD userId text"]];
            
            [db executeStatements:[NSString stringWithFormat: @"ALTER TABLE t_videoInfos      ADD creatTime text"]];
            [db executeStatements:[NSString stringWithFormat: @"ALTER TABLE t_videoInfos      ADD userId text"]];
            
            [db executeStatements:[NSString stringWithFormat: @"ALTER TABLE t_homeGroupDetial ADD creatTime text"]];
            [db executeStatements:[NSString stringWithFormat: @"ALTER TABLE t_homeGroupDetial ADD userId text"]];
            // 更新完成后,版本號迭代
            verson++;
           //寫入新的版本號
            [db setUserVersion:verson];
            if ([currentHPCacheToolVerson integerValue] == verson) {
                break;
            }
        }
        default:
            [ZZHUDMessage showCompletedText:@"數據庫升級失敗,請在個人中心中反饋" withCompletedType:HUDShowCompletedTypeError];
            break;
    }
}

5.iOS 解決.dylib找不到的問題

原因:應該是從iOS7之后,所有的依賴庫由.dylib變成了.tbd
As for Xcode 7 b4: To add Parse support into existing project, follow the Parse "Set up the SDK" for existing project and to add the libz and libsqlite3 libs, use:
如下圖所示:


tbd搜索結果.png

*當然,有網友說tbd使用也是一樣的.但是,我們的dylib去哪里添加呢?
幾經波折,終于找到了添加的方法:

1. Build Phases -> Link Binary with Libraries -> +
1.png
2.點擊彈框左下角的"Add Other..."
2.png
3.快捷鍵 "command+shift+G"
3.png
4.快速搜索路徑:"/usr/lib",點擊Go
4.png
5.在左上角輸入搜索內容"libz"(這里以libz.dylib為例子),搜索完后,點擊"lib"的標簽,然后就出現搜索到的結果啦
5.png
6.最后點擊搜索的結果,再點擊open就可以了.

這里會不斷更新自己項目工程中遇到的BUG和問題,并給出相關的解決方案,希望大家多多交流.謝謝
最后,附上本人寫的相關的demo,有一些實用性的例子,相互學習,相互交流:demo地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容