Just My Life & My Work

Posts tagged ‘technique’

[Xcode] 自動更改建置號碼

開發App迭代十分快速,時常要更改版本號碼Version Number建置號碼Build Number,如此容易區隔每個版本,測試員回報問題也能輕易對照。

Version Number制定規則比較直覺,一直都是從1.0.0開始,feature有大更新就變2.0.0,feature只有小變動就改2.1.0,bug偶爾修掉就微調為2.1.1。

Build Number可以怎麼做呢?我習慣將它設定為日期+時間,比如今天日期:160324・時間0111,合起來就是1603240111,當收集到Crash報告bug清單,對照Git版本控制,就能知道當時的問題所在!

過去我們都是手動去更改BN,現在有更聰明的作法,就是在Xcode的Build Phases加入Run Script,接著按編譯(Command + B),就能在General的Build看到自動更換為當時的日期時間。

加入這幾行Run Script就好囉⋯⋯

timestamp() {

    #date +" at %H:%M:%S on %m/%d/%Y"

    date +“%y%m%d%H%M"

}

buildNumber=$(/usr/libexec/PlistBuddy -c “Print CFBundleVersion" “${PROJECT_DIR}/${INFOPLIST_FILE}")

buildNumber=$(timestamp)

/usr/libexec/PlistBuddy -c “Set :CFBundleVersion $buildNumber" “${PROJECT_DIR}/${INFOPLIST_FILE}"

看不太懂沒關係,反正這只設定那麼一次XD~

Xcode Build Number

設定Run Script

Xcode Build Number2

編譯後Build自動變更

參考:Xcode 自動填寫Version Build 腳本

[iOS] 正規表達式 (Regular Expression)

我們時常有個需求,就是去判斷數字與字母的規則,比如身份證字號是一個大寫字母+九個數字。判斷方法有很多種,這裡有個非常方便的技巧,就是使用正規表達式 (Regular Expression)

我可以這麼寫⋯⋯

/**
 Theme: Regular Expression
 IDE: Xcode 7
 Language: Objective C
 Date: 105/03/05
 Author: HappyMan
 Blog: https://cg2010studio.wordpress.com/
 */
    NSString *errorMessage;
    // 確認身分證字號格式
    NSString *phoneNumber = @“L123456789";
    NSString *phoneRegex = @"[A-Z][0-9]{9}";
    NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
    BOOL matches = [test evaluateWithObject:phoneNumber];
    if (!matches) {
        errorMessage = @"身份證字號第一碼英文+後9碼為數字";
    }

看了以上的程式片段,就知道如何使用了吧!

那其實正規表達式還有很多種用法,就拿StackOverFlow高人指點的例子⋯⋯

How to validate a phone number (NSString *) in objective-c? Rules:

  • minimum 7 digits
  • maximum 10 digits
  • the first digit must be 2, 3, 5, 6, 8 or 9

實作解答如下:

NSString *phoneNumber = ...;
NSString *phoneRegex = @"[235689][0-9]{6}([0-9]{3})?";
NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
BOOL matches = [test evaluateWithObject:phoneNumber];

參考:Objective-c regex to check phone number

UTF-8 (8-bit Unicode Transformation Format)

每次開發iOS App,傳送資料到server時很常要編碼,會使用到UTF-8 (8-bit Unicode Transformation Format),可是我一直不曉得它的全名XD~這玩意兒好像只要會用就行!?

直到看見這張圖表,才知道UTF-8後來居上!看來它真的有過人之處,尤其在這行動裝置盛行年代~

UTF-8.png (繼續閱讀…)

[iOS] iBeacon 測試

睽違一年半之久,總算要來開發iBeacon,看來越來越多應用持續出現中!因為最近要出國,所以想到可以將iBeacon放進行李廂,進入範圍或離開範圍時,手機會跳出提示,如此就不用眼睛一直盯著行李箱:)~

一年半前參加「Retail Battle Hackathon 創新零售駭客松活動」,KKLabs給參賽者每人一顆Spot Beacon當作禮物,直到最近我才真正拿出來用XD~

可以先參考之前的文章:初探 IBEACON 技術

(繼續閱讀…)

[圖解] 已傳送與已讀取

近一年來開發通訊軟體App,需要深入了解已傳送與已讀取的機制,不過其實現代人都會使用Facebook或Line(甚至WeChat或WhatApp等等),都知道它是怎麼運作,假如是軟體工程師的話,可以圖解分析它而後實做。

Quickblox 已傳送與已讀取

(繼續閱讀…)

[圖解][iOS] 蘋果推播通知服務 (Apple Push Notification Service)

會使用手機的人都一定會接觸到推播通知!身為iOS App開發者三年的我,也只大概瞭解其如何實作,現在我要來揭開它詳細的運作原理與架構。這裡也不想花大篇幅描述太多細節,不是很聰明的我就用圖解蘋果推播通知服務 (Apple Push Notification Service)的方式來理解它!

Apple Push Notification Service00003

官方開發者文件已經說得非常清楚,然而會主動去翻來看的人並不多,大概是因為全部都是英文描述,加上十分詳細的說明,讓想要快速上手的人另尋其它網頁。上週幫朋友小A測試iOS後台推播,更進一步知道如何申請推播憑證,在此之前要先申請開發憑證!才知道iOS的推播還真的很「耐人尋味」。想起八月份的百貨公司案子,所使用的後台推播服務是被臉書收購的Parse,它讓我不必自製一個後台就能輕易地把訊息推播到裝置上!

(繼續閱讀…)

人臉偵測資訊

最近看了馬克清華大學用中語演講,提到他為何創業,共有三個故事與大家分享:

  1. 連結人
  2. 用心、專注
  3. 向前走

於是也間接說明人臉偵測的重要性,四年前至今一直以來,只是隨手記錄研究所課程內容放到部落格上,三不五時就會有網友來「取經」,比較積極的人還會提問題,甚至自行寫文章分享。要是有機會讓我創業,我肯定也會做跟人有關的題目,因為我想讓生活變得更好!

人臉偵測資訊 Face++ website

(繼續閱讀…)

[iOS][watchOS] 位元代碼 (Bitcode)

還沒看到有高人翻譯,所以我暫且稱之為位元代碼 (Bitcode),看來我被中國化了⋯⋯台灣用語應為位元程式碼!其實在WWDC 2015,Apple只是提到它,並沒有詳細介紹它架構與運作,謎樣地描述什麼是位元代碼 (Bitcode):

Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the App Store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store.

Xcode hides symbols generated during build time by default, so they are not readable by Apple. Only if you choose to include symbols when uploading your app to iTunes Connect would the symbols be sent to Apple. You must include symbols to receive crash reports from Apple.

Note: For iOS apps, bitcode is the default, but optional. If you provide bitcode, all apps and frameworks in the app bundle need to include bitcode. For watchOS apps, bitcode is required.

如果以圖示來描繪是:

bitcode

(繼續閱讀…)

[Objective C] 溝通模式 (Communication Patterns)

學寫iOS App已經滿三年,回想那時候還是iOS 6,而如今再過兩個月就要邁入iOS 9,這個作業系統隨著時間持續進化,多數基礎機制沿用至今。儘管已會獨立寫出一個App,然而在Objective C技術上還是有待精進,比如用來傳遞訊息或資料的溝通模式 (Communication Patterns),我也僅熟悉某幾種,其機制的概念與優劣尚未明朗,於是想趁著昌鴻颱風給放假的時候,來瞭解一下這五種溝通模式:

  • KVO (Key-Value Observing)
  • Notifications
  • Delegation
  • Blocks
  • Target-Action

Communication Patterns

(繼續閱讀…)

標籤雲