2013年2月18日 星期一

Jenkins git change log for 中文

我的英文不好,

而且團隊合作上,需要在寄送版本的時候,通知PM or Tester 修改的相關內容

如果用   

${CHANGES_SINCE_LAST_SUCCESS, reverse=false, format="<li>Changes for Build #%n %c </li> ", showPaths=true, changesFormat="<li>[%a]<font color=#ff0099> %m </font></li>", pathFormat="<br>%p<br>"}

 

就可以很輕鬆的達到,在email 中通知變更內容,不過.....

他顯示中文是亂碼 orz

如果用ssh 到後台去看,可以發現如果使用  cat change.xml

依然可以看到正確的中文字,那麼問題應該就出現在讀取這個檔案轉到email上面的問題

  • 產生自己的git change log, 印到email上送出

    我希望產生的log與 ${CHANGES_SINCE_LAST_SUCCESS…} 一樣
    是包含到上次成功build的間所以的log
     所以我需要知道上次成功建立的時間
     
    export LAST_SUCCESS_BUILD_TS=$(stat -f "%m" ../../jobs/${JOB_NAME}/lastSuccessful)
     
    知道時間之後,就要利用git log印出所以的commit message
     
    git log --pretty=format:'<li>%h was %an, %ar, message: <font color=#ff0099>%B</font></li>' --since="$LAST_SUCCESS_BUILD_TS" > GIT-Log-Report.txt
     
    最後會產生我想要的 GIT-Log-Report.txt   
     
    但是!
     
    這個是一個UTF8 的檔案
     
    如果直接用 Jenkins 的網頁觀看 也會看到亂碼,因為他的網頁是用UTF-16讀取的
    螢幕擷取 13 2 19 下午2 582
     
    而Email 呢? 我這裡是希望mail 送出Html的格式出來,而他是用 Big5 讀取的
     
    所以在使用  ${FILE, path="…..txt"}  之前
     
    要先用
     
    iconv -f UTF-8 -t BIG5 GIT-Log-Report.txt > GIT-Log-Report.BIG5.txt
     
    產生big5 的檔案,
     
    最後產生的script :
    螢幕擷取 13 2 19 下午2 58
     
     
    然後再使用   ${FILE, path="GIT-Log-Report.BIG5.txt"}  
     
    將資料印到 Email 上 :
    螢幕擷取 13 2 19 下午3 01
     
     

Jenkins + KIF

經過 前一篇的 Jenkins + Unit Test by iOS-sim

這個也算順利的在Jenkins上面跑起來的

先照著  KIF Readme 產生基本的建構環境

 接著做了一些修改

  • 改用CocoaPod

    由於如果用 read me 所講的方式加入 KIF framework 的話

    會因為xcode workspace的設定檔案不會上傳到 git

    且 xcode workspace 會用 pod install 產生

    導致 Jenkins在build的時候 會找不到 libKIF.a  (-lKIF 會找不到)

     

    在 public的 pod search KIF 有一個非官方的來源

    但是因為他很機婆的把 下面這一行加進去了  orz

    s.xcconfig     = {  'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) RUN_KIF_TESTS=1' }

    會導致 preprocessor defined 在 $(inherited)  就已經存在 RUN_KIF_TESTS=1

    這樣會發生什麼事情呢?  ==> 不論跑哪個 target都會讓他執行kif的劇本

    這不是我想要的呀 T_T

     

    所以呢.... 我就自己開了一個private 的 KIF spec  without  RUN_KIF_TESTS=1

    而另外如 readme中,手動的將 RUN_KIF_TESTS=1 加入 需要的target 中

     

  • 借用跑Unit Test的經驗,在target後面加入script

    如果照readme中的script在 CI上跑,似乎會遇到權限的問題
     
    可能是因為產生的app的位置的關係吧?!
     
    後來我想,既然之前可以跑Unit Test,那就照同樣的處理方式吧!
     螢幕擷取 13 2 19 下午2 21
     
    然後在 Jenkins 上 使用script
    螢幕擷取 13 2 19 下午2 29
     
    並且在report Email 中加入
    螢幕擷取 13 2 19 下午2 30
     
    最後會在Email中看到
    螢幕擷取 13 2 19 下午2 31
     
    不過,現在即便是失敗了.... 信件還是Successful  XDDD
     
開始的設定還是有點麻煩
不過至少後期能自動化測試
 
接下來就是寫劇本了!
 
 

2013年2月15日 星期五

Jenkins + Unit Test by ios-sim

經過了一連串折騰,終於發現

原來之前已經半成功了!

只是jenkins  的使用者權限開錯了,導致跑不動 ios-sim

 

以下是整個的經過

1. 原本打算使用 octest 

    在 command line 下要執行

xcodebuild -workspace ??????.xcworkspace -scheme ?????Test -sdk iphonesimulator5.1 -configuration Debug TEST_AFTER_BUILD=YES clean build | ocunit2junit  

    (https://github.com/ciryon/OCUnit2JUnit)

     ?????Test  是一個特殊的scheme ,建立後且執行 Test

    但是這個在 ios 6 上遇到了問題

    iOS 6 有些簡化用的語法  ex : @{ xxx:ccc} = [NSDictionary dictionary…..]

    如果使用 -sdk iphonesimulator5.1  是不能建置的

    但是如果使用 -sdk iphonesimulator   似乎會有無法註冊的問題

    (http://longweekendmobile.com/2011/04/17/xcode4-running-application-tests-from-the-command-line-in-ios/) (http://www.raingrove.com/2012/03/28/running-ocunit-and-specta-tests-from-command-line.html)

    這裡我實驗了很久還是卡住

    (有可能問題與最後的解法是相同的....)

2.  後來決定不使用xcode原來呼叫simulator的方法

     改用 ios-sim   

     採用這篇的作法  http://9elements.com/io/index.php/continuous-integration-of-ios-projects-using-jenkins-cocoapods-and-kiwi/

 

    接著我就遇到了  

"Simulator session timed out.

    的問題

    https://github.com/phonegap/ios-sim/issues/5

    看了問題討論  似乎只要把  檔案一個位置就好了

    但是  因為現在在放假期間  我不太敢亂重開server 

    所以只好想想看要怎麼改他的使用者權限

    最後發現....

     因為我一直以來都是用  sudo launchctl load xxxxx

     如果用 sudo 的話,則好像會是用  root 開 jenkins  

     而他沒有  GUI的權限(?我猜測的… 如果有錯麻煩告知一下嚕@@)

     所以開不了  simulator  導致timeout

     所以我改用  user帳號  ssh 登入 server

     只執行   launchctl load xxxxx

     就可以正常的跑Unit Test了

 

 

 

 

2013年2月2日 星期六

[OMT] tapatalk X Winter Wong

 

http://onemorething.com.au/winter-wong/

http://www.tapatalk.com/

tapatalk  好像是一個論壇的瀏覽器

詳細因為本人的英文不太好....

 

聽完了他的講題

我聽到的幾個點是

1. 如何讓自己的app  rate越來越高?

 1.1. 想辦法做出更好的app

 1.2. 一些評分的機制

       計數50 次後才跳出詢問是否要評分的alert

       當 產生一次 crash 就歸零計數

       產生重大bug時,就不讓他跳alert

       結合crash report來知道給負評的人,究竟有遇到什麼問題?

       (大致上就是在好的情境下才讓使用者評價)

2. 更新app的頻率

   當評價不好的時候

    => 常常更新吧 ,加入新的feature or bug fixes

    => 因為 rating is reset for each update

    當評價好的時候

    => 減低更新的頻率,來累積評價

    => 100 ratings vs 1000 ratings = ~10-20%sales increase

 

3. Multi-lingual support

   http://crowdin.net/

   似乎是等使用者來自己幫忙翻譯,

   不過可能也要app 夠好夠值得這樣做?!

 

4. 他在這裡也有談論到 他們的android經驗

   #1 social Paid App (vs ~#5 in iOS)

    1:2 sale ratio

    另外 他們也遇到一些issues

     very few quality open-source framework

    Monetization and Piracy issues

5. 最後他們還是走向 api的路程

    把他們的功能開放api 

 

===============

快一年了....  XD

不過某些作法正好也有被驗證到....!!