2013年12月25日 星期三

[google doc] 樞紐分析

用 Google Doc 計算同項目的總和


如下


[iOS] start for iOS 6 and 7

之前因為 一直有iOS 5 的案子

發現好多新的用法與技術都沒有用到 或知道

正好有一段空閒的時間

趕快把library更新



2013年12月16日 星期一

[iOS] posing class

最近發現好久沒看技術文章了 orz

看到了一個有趣的少用的技術 posing

http://www.tutorialspoint.com/objective_c/objective_c_posing.htm

http://www.cnblogs.com/IT-Chris/archive/2013/03/10/2953176.html


裡面提到

Posing (扮演)和Categories(类目)的区别是:对于子类override父类方法的
情况,Categories 不能再调用父类的被重写的方法了;而Posing 可以通过“
[super 方法];”方式来调用父类被重写的方法。

hmm.... 在某些情況下確實可以用用看

可以很輕鬆的阻斷加入要做的事情@@


2013年12月12日 星期四

[ROR] 後台建立 - 權限建立

這裡使用了 cancan這個有名的library

目標

1. 用 Device註冊帳號的初始帳號都是一般權限

2. 有一個網頁可以修改某個user為 admin的權限

3. 每個user都可以看某個頁面,但是因為權限不同而會不同



2013年12月9日 星期一

[ROR] 後台建立

目標:產生一個後台在 Heroku

讓同事能申請帳號,然後並手動加入admin的tag

在後台開一個admin的資料區塊,可以顯示同事上次替"神~清單"設定的簡易後台。



2013年11月16日 星期六

[iOS] Web api with CoreData

當然 已經有很多好用的api

像是 AFIncrementalStore

但是其實我沒有用過

現在也沒有空去改用

原因是.... 遇到太多的廠商開的api是在亂七八糟....

因此還是得自己針對案子去設計model


不過最近遇到下面的問題

-> 當 api 有 paging的功能,卻設計了一個 infinite scroll view


一般來說我常用的作法是

api -> 接到的data 直接存在 CoreData中

view -> 透過 NSFetchedResultsController  拿 CoreData的資料


但是如果加上了 page呢?

page意味著說每頁的資料在每次拿可能都不一樣

api 是"一頁一頁"的呈現資料

但是 UI 設計的是一個 infinite scroll view

並不會知道轉到了哪一頁(往往後端又想保留每頁可以動態調整資料數量的權力),即便是每個資料都有id

例如cache了10的資料,

   當下次在開啟時,api 應該要更新哪些資料?第一頁?一到十頁?

   似乎都不太對,

因此,試想了一下規則

1. 用一個Global 變數去儲存該api 已經拿到第n的頁數 (假設頁數為連續)

2. 離開app時(或剛進入app時),清除掉所有跟page api 有關的object

3. 如果設計需要,在離開該頁面時,清除掉所有跟page api 有關的object


造成的結果會是

在這次開啟app的狀況下,使用者會看到cache的結果,頁面資料只會拿一次(不會更新資料,因為global 變數去記錄該api已經拿到第幾頁)

在下次開啟該app 則會清除上次看過的資料,然後重新向server拿新資料



這樣應該可以解決大部分的問題吧


[iOS] Core Data 的 思

我的Core Data 的思維模式大致上是從

https://github.com/robbiehanson/XMPPFramework

XMPPFramework / Extensions / CoreDataStorage

中得到想法或靈感

其中比較重要的是
他利用多執行續去執行 core data  (在 apple 的guide line 中其實不建議用多執行續去做)

我將這個方法套用在我現在的專案上

1. model control 動作後,會呼叫 sub thread 上的 NSManagedObjectContent (moc) 做動作

2. VC 上,用的是 Main thread moc 產生的 NSFetchedResultsController 來操縱 View


一開始看起來都還ok

不過最近卻發現一些問題


2013年11月15日 星期五

[other] Mac 重灌筆記

如果不用time machine直接還原的話
  1. 分割磁區
  2. 軟體
    1. Chrome
    2. Xcode
      1. 需要保留 4.6.3 & 5.0 (for iOS 5 模擬器)
      2. 可能在一陣子就不用測試 iOS 5
      3. profiles
      4. p12
      5. color plugin
    3. 輸入法
      1. yahoo輸入法
    4. MacHeist  (Paid)
      1. fantastical
      2. CleanMyMac 2
      3. AirServer
    5. NotesTab

2013年11月4日 星期一

[ROR] rbenv and init initial env

看了一下

原本用 RVM 想說用一下 rbenv看看

緣由 因為原本自學的時是使用的是 2.0.0 + ROR 4.0
但是上次的一個前輩的建議 使用 1.9.3 + ROR 3.2.15 會比較多資源

因為想說之後也有可能會遇到多版本的問題
舊先學習看看

http://edapx.com/2013/05/23/switching-from-rvm-to-rbenv/

https://github.com/sstephenson/rbenv



2013年10月6日 星期日

[iOS] Xcode 5 new project for iOS 5.x

我也不想

不過之前還沒執行的案子有說要支援 5.x

那就只好設定了

Sega xcodeproj Main storyboard and PEGA VISION App Flow V2

 

我也不確定實機上會有不有問題

不過如果是模擬器上面

english 沒有勾選,似乎會讓setting找不到 Main.storyboardc

我猜可能是Base.proj 的關係(似乎 iOS6 or 7 有把storyboard的多語系改成  一個 storyboard 配合多 string file的模式,恩 這樣感覺也比較合理)

過度時期,先這樣做吧

2013年9月29日 星期日

[ROR] Turbolink, ajax, jQuery, coffeescript, Asset Pipeline

X  …. 怎麼那一次混雜那麼多東西orz
緣由:
想在ROR 4上面寫ajax
我先依照的教學寫了一下,
http://ihower.tw/rails3/assets-and-ajax.html
不過他是for ROR 3.x
所以惡夢就開始了...

2013年9月22日 星期日

[ROR] heroku change postgress

 

如果要清掉heroku上面的DB

好像沒辦法用 rake db:drop

我是直接用它的web介面刪掉db

在建立一個新的

不過

使用 git push heroku時

db帳號密碼就會不對

 

我後來找到  

heroku config

可以看到

DATABASE_URL:  xxxxx

HEROKU_POSTGRESQL_AQUA_URL:   yyyyyy

就用

heroku config:set DATABASE_URL=yyyyyy

換成正確的postgres db的位置就好了

 

[iOS] 5.x 6.x view controller life

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html

應該快用不到了...

不過還是先記錄一下

把trello 上面的雜項清理清理

2013年9月21日 星期六

[ROR] heroku, postgres,

有在嘗試的 Paas

heroku and openshift

原本在試驗openshift ,不過在上傳啟動server的部份遇到的困難,我就轉去heroku看看

 

基本上我照著他的教學跑了一次

有遇到幾個問題

1. 網頁上app 的名稱

似乎給了一串預設的編碼

如果改了

就要記得執行  

git config -e

把裡面的 git remote的位置改變

 

2. postgres 

他們官方是建議使用postgres 

我也在local端裝了

不過如過在 development 下 使用 postgres

會導致我必需把local 的username 給傳到git 上面

有點不想.... 實驗了很久,如果再mac 上在開一個使用者

好像還是有權限的問題

最後....我想說在development下用  sqlite就好了

Gemfile 寫下

 

# Use postgresql as the database for Active Record
group :production, :test do
gem 'pg'
end

group :development do
gem 'sqlite3'
end

 

 

然後

database.yml 就用

development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000

 

 

 

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

ROR 能做的設定參考:http://ihower.tw/rails3/environments-and-bundler.html

http://robdodson.me/blog/2012/04/27/how-to-setup-postgresql-for-rails-and-heroku/

http://www.fullybaked.co.uk/articles/getting-postgresql-running-on-osx-mountain-lion

http://www.moncefbelyamani.com/how-to-install-postgresql-on-a-mac-with-homebrew-and-lunchy/

 

2013年9月15日 星期日

[雜] 有趣的網址

https://skydrive.live.com/?cid=90dadd2e56b02895&id=90DADD2E56B02895%21109

軟體文件的範例....

不過有趣的是最後一張圖XD

2013年9月12日 星期四

2013年9月10日 星期二

[XCode] 想要備份一下舊的XCode

 

sudoxcode-select-switch /Application/Xcode\ 4.3.3.app/Contents/Developer/

 

不過不確定怎麼用

查察看

ref : http://blog.qinyujie.net/zh/2012/07/30/713/

[iOS] CoreData Transient

http://www.2pi.dk/tech/cocoa/transient_properties.html

還沒有看

….

[ROR] 閱讀筆記

1.  關於瀏覽器相容的問題

我原本以為都是前端語法的問題 (實際上也應該是吧?!)

不過ror 似乎有些config 可以幫忙設定讓產生的網頁能告訴瀏覽器要怎樣做....

Ref : http://ihower.tw/rails3/environments-and-bundler.html

config.action_dispatch.best_standards_support = : builtin

 

2. 

建立 model  :   rails g model price_log

之後對model(s)做變更   :   rails g migration add_price_log_parameters

產生  :   bundle exec rake db:migrate

想要試做 http://ihower.tw/rails3/activerecord-relationships.html

可是卻無法有效的在console下指令

ref : http://guides.rubyonrails.org/association_basics.html

 

 

 

3. 觀察log   : tail -f log/development.log

2013年9月6日 星期五

[iOS] crash report

http://stackoverflow.com/questions/1460892/symbolicating-iphone-app-crash-reports

 

雖然說成功的叫出來了 不過資訊似乎不太正確 …..  最後還是看crash report 上面的字眼

 

Steps to analyze crash report from apple:

  1. Copy the release .app file which was pushed to the appstore, the .dSYM file that was created at the time of release and the crash report receive from APPLE into a FOLDER.

  2. OPEN terminal application and go to the folder created above (using CD command)

  3. atos -arch armv7 -o YOURAPP.app/YOURAPP MEMORY_LOCATION_OF_CRASH. The memory location should be the one at which the app crashed as per the report.

Ex: atos -arch armv7 -o 'app name.app'/'app name' 0x0003b508

This would show you the exact line, method name which resulted in crash.

Ex: [classname functionName:]; -510

2013年8月31日 星期六

[Ruby]

http://www.ruby-doc.org/docs/ProgrammingRuby/

Doc

 

http://openhome.cc/Gossip/Ruby/index.html

一些簡介

http://www.slideshare.net/ihower/ruby-19-1311075

投影片  1.8x vs 1.9

 

http://rainlife.iteye.com/blog/375531

大概在講一些  動態生成的觀念

about

eval,  instance_variable_set, instance_variable_get ...

const_set, const_get

binding

send

remove_method

undef_method

method_missing

freeze  frozen? frozen   ==> 感覺有點像是lock a instance

2013年8月28日 星期三

[iOS] storyboard : to navigation with no animation will be crashed if there is any GestureRecognizer on the vc at iOS 5.1

….. 不過都已經是 iOS5 

記錄一下

在storyboard 上 如果一個vc裡面有 GestureRecognizer

似乎使用push navigation with no animation 會造成crash

...

 

只好改用code來寫

2013年8月26日 星期一

[iOS] Cocoapods 0.23.0 bug for xcdatamodeld


等這個release https://github.com/CocoaPods/Xcodeproj/pull/83
應該可以正式解決

自己看到的表象特徵應該是 0.23.0想要正確的在xcode顯示xcdatamodel的資料
結果弄出bug
導致xcode讀取Pods/Pods.xcodeproj/project.pbxproj   反而把  xxxx..xcdatamodeld/.xccurrentversion 內的資料給洗掉了

 研究起來的主因好像是因為 他們想要讓 xcdatamodeld能正確的在xcode被顯示,所以把Pods/Pods.xcodeproj/project.pbxproj 內對於 xcdatamodeld的參數描述改成 XCVersionGroup  (0.22.3 是 PBXFileReference) ,但是又沒有正確的把 children & currentVersion 正確的寫上去

初步對於 Jenkins workaround的方式是...
sed "s/XCVersionGroup/PBXFileReference/g" Pods/Pods.xcodeproj/project.pbxproj > tmp.pbxproj
mv Pods/Pods.xcodeproj/project.pbxproj old.pbxproj
mv tmp.pbxproj Pods/Pods.xcodeproj/project.pbxproj
rm old.pbxproj
這樣就可以先避免被Xcode洗掉資料
剩下的就等新版本嚕

[ROR] Ruby

開始走向下一步

過去對於後台整合我常常有諸多意見

還是來實作看看

 

當然還是得要借助先輩的力量!

http://ihower.tw/rails3/firststep.html

http://ihower.tw/blog/archives/1720

 

http://www.cc.ntu.edu.tw/chinese/epaper/20070620_1007.htm

http://rails.pixnet.net/blog/post/22952893

 

https://www.ruby-toolbox.com/

 

簡介個方法

http://guides.ruby.tw/ruby/about.html

 

在 Wiki 中找到 Closure 的資料,其中有的一段 Ruby 程式碼清楚闡述了 Proc 和 Lambda的差別:

http://tonytonyjan.net/2011/08/12/ruby-block-proc-lambda/

2013年6月30日 星期日

2013年6月28日 星期五

[other] 確認custom URL Scheme & 確認是否有裝某隻APP

http://peko.idv.tw/archives/2011/04/20/784/

http://stackoverflow.com/questions/627916/iphone-safari-check-if-url-scheme-is-supported-in-javascript/1404662#1404662

有點土砲

不過卻很實在!

[Obj-C] Thread Synchronization

有空在好好看一下

http://nextstep.sdf-eu.org/clocFAQ/#sync

 

基本上應該還是會用到

畢竟multi-thread的狀況會很多

不過可能要去了解一下其他advanced threading concepts

 

[XCode] Localize

主要的問題應該還是在 storyboard上面

不過已經有別人的解法了 http://danielsaidi.wordpress.com/2012/08/20/localization-in-ios/

http://torstenbuechner.wordpress.com/tag/ios-objective-c-obj-c-xcode-localize-localization-xcode4-storyboard-languages-ios-dev/

http://www.youtube.com/watch?v=cF1Rf02QvZQ

現在用的方法有點不是很恰當

另外也還不確定iOS 7 是否會有bug

….

--

事情太多了....  真難慢慢去實驗

2013年5月30日 星期四

[iOS] Xcode Plug-in

從強者那邊聽來的XD

記錄一下

趁現在比較閒一點的時候裝一下

 

可以自動補齊圖檔名稱的外掛

https://github.com/ksuther/KSImageNamed-Xcode

 

在code的地方可以叫出顏色選擇的dialog

https://github.com/omz/ColorSense-for-Xcode

 

可以讓color dialog 輸入#FFFFFF 之類的色碼

http://wafflesoftware.net/hexpicker/

 

直接動態注入code

http://injectionforxcode.com/



vim on xcode

 

http://julian.wuonm.com/blog/2012/05/25/XVim-Xcode-plugin/



XCode 5.x 似乎對這些plug-in似乎還有點問題



[iOS] CGContextShowTextAtPoint & non-ASCII

由於 CGContextShowTextAtPoint  不能畫出 非ascii的字

所以只能用  NSString drawAtPoint...

不過換過去之後記得要

在 drawAtPoint  前後夾上

UIGraphicsPushContext(_composedImageContext);

 

[text drawAtPoint:(CGPointMake(0, expectedLabelSize.height / 2.0)) withFont:[UIFontfontWithName:fontName size:60.0]];

 

UIGraphicsPopContext();

 

把畫紙推到最前面去畫 然後再推回來

ref:http://www.cocoachina.com/bbs/simple/?t10441.html

2013年5月15日 星期三

[License] BSD MIT Apache

確實不是很瞭解使用了有相關的license的code的之後,要盡的義務是什麼

 

看完一些資源的認知(不確定對不對)

BSD

1.  如果發布的是原始碼  則不可以刪掉在原始碼黨裡面的bsd宣告(須保留著作權聲明、BSD 授權條款的條件及免責聲明)

2.  如果發佈的是library or binary file,  則需要在在說明文件and版權聲明中寫下 BSD的協議(須保留著作權聲明、BSD 授權條款的條件及免責聲明)

3.  不可以拿作者/機構的名字做宣傳

所以....

可能要做的動作是

 a. app上apple store 後  可能要在  EULA  or  policy 連結  的文件,填入使用的 library 和 他的BSD的版權聲明

 b.  如果是賣原始碼給別人,則如同 BSD - 1 項

 c.  理論上我們應該不會手賤用機構或作者的名稱做宣傳

 

Apache 2.0

1.  修改過的地方要在收權下面加入

     (至於你所寫的衍生程式也建議你就在 原制式的著作權聲明的下一行加上你的著作權聲明。譬如:This file is modified by ΧΧΧ(姓名) on 2009.)

 2. 簡介:http://www.openfoundry.org/tw/legal-column-list/8581-the-elaborate-license-apache-20

 

可能要做的動作是

a. 告訴別人我改過哪裡了  (不過我應該不會散佈 原始碼或修改套件,如果有散佈的話要注意一下)

b  如這個 http://luckyalbert.blogspot.tw/2012/09/apache-license-20.html 

     提到 : 如果散佈出去的是 binary or 執行檔,則需要在 說明頁面裡面也要些到license.....

      (看起來跟 BSD 的 a  b  差不多)

 

參考連結

http://inspire.twgg.org/internet/trends/item/74-comparison-of-five-kinds-of-standard-open-source-license-bsd-apache-gpl-lgpl-mit.html

http://www.openfoundry.org/tw/legal-column-list/8581-the-elaborate-license-apache-20

https://zh.wikipedia.org/wiki/BSD%E8%A8%B1%E5%8F%AF%E8%AD%89

http://www.oschina.net/question/12_2828

 

再授權

http://www.openfoundry.org/tw/glossary/749-sublicense

Apache 2.0 可以自己在授權 給其他人用,

BSD似乎好像沒有寫的很清楚

 

http://www.openfoundry.org/tw/forum?func=view&catid=8&id=824#827

http://www.openfoundry.org/tw/forum?func=view&catid=8&id=458

上面這篇提到

Apache 2.0 允許 被授權的人跟改授權,但是不得違背原來Apache 2.0  的授權

(也就是可以改成自己的授權)

Apache 2.0  如果要移除內容相關的logo則要去跟所有權人談 (基本上不可移除)

 

 

幾個問題:

1.  如果同時間用兩三種lib  有不同的Licenese 那要怎麼處理@@?

    自A:  似乎跟再授權有點關係

2. 不過還是不懂Apache 2.0 那要怎樣賣錢,既然改變授權還是要符合原本的ABCD

    那這樣的話 前面有提到要是free不就表示再怎樣變更授權都不能賣錢了嘛?

     自A:  http://www.openfoundry.org/tw/forum?func=view&catid=8&id=295

     1. 可以不公開原始碼,自己轉成商業授權  (所以這裡表示只需要列出著作聲明、不需要列出條款嚕?因為已經改授權了?)

     2.  沒有義務要將使用的source code列出來,不過可以列出來以示尊重

     3. 原來的檔案要保留著作聲明 且要告訴別人這個檔案我改過了

3. 著作聲明 與 條款 與 免責聲明  都是同樣要保留的嘛?

 

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

Final

http://www.openfoundry.org/tw/forum?func=view&catid=8&id=824#827

這篇直接點出我應該做些什麼.....

好啦   應該這樣做就是了orz

有空實作看看

     

2013年4月30日 星期二

[Mac server] 重新設定 server

終於....

因為我在清除機器裡面的舊資料

不曉得刪掉什麼東西

導致server 在登入app時一直登入不進去

刪掉server也似乎沒有清除掉舊的setting

正好有這篇

http://krypted.com/mac-os-x-server/hosed-your-mountain-lion-server-reset-it/

刪掉

sudo rm /var/db/.ServerSetupDone

就ok了

流程

1. 先用 appCleaner 刪掉 server.app

2. 在刪除 /var/db/.ServerSetupDone

3. 重新安裝 server.app

4. 開始重新設定

打完收工


2013年4月19日 星期五

2013年4月11日 星期四

[Jenkins] build for google map android Key

因為key store 綁電腦

所以developer 傳到git後,由jenkins下載,build 過後並無法顯示地圖,因為keystone不同

因此.... 要在jenkins  用ant 建立前

先換置掉  key store

script :

#!/bin/sh

# 步驟 (1/3)
DEVELOP_ANDROID_GOOGLE_API_KEY=XXXXXXXXX

# 步驟 (2/3)
# 處理google map android api key 的問題
# 先用 google帳號 到google console申請 api key
# builder的 default.keystore的
# sha1 = XXXXXXXXX

# 步驟 (3/3)
# 將申請到的 key 複製到下面的變數中
ANDROID_GOOGLE_API_KEY=XXXXXXXXX


# 換置動作
sed "s/$DEVELOP_ANDROID_GOOGLE_API_KEY/$ANDROID_GOOGLE_API_KEY/g" AndroidManifest.xml > AndroidManifest.xml.tmbuilderkey

mv AndroidManifest.xml AndroidManifest.xml.tmp
mv AndroidManifest.xml.tmbuilderkey AndroidManifest.xml

 

 

以上應該就能暫時解決問題

(不過同時多個開發者應該還是會  …orz)

2013年4月10日 星期三

[Jenkins] MacOS + Jenkins 系統更新

記錄一下 這次更新的流程

1.  app store 升級 MacOS
2.  app store 升級 Xcode
(此時重開 後的  Jenkins 會是由  主要帳號開啟  )
3. 在主要帳號的  command line 下  執行 launchctl unload  xxxxxxxxxx
4. 切換到 Jenkins 的帳號下
5. 在  command line 下  執行 launchctl load  xxxxxxxxxx  (不可以加入 sudo)
6. 開啟Jenkins網頁
7. 進入系統頁面下載新版本
8. 換置 .jar  (注意 own & grp)
9. 在  command line 下  執行 launchctl unload  xxxxxxxxxx
10. 在  command line 下  執行 launchctl load  xxxxxxxxxx

11. 記得要加入 ssh-add 相關的 id
12. 記得把jenkins 下的 cashlytics 打開

打完收工.....

didReceiveMemoryWarning for 5 & 6

- (void)didReceiveMemoryWarning; // Called when the parent application receives a memory warning. On iOS 6.0 it will no longer clear the view by default.

…….  看來對於 iOS 5.x 還有多餘的方式要處理了

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

if ([self isViewLoaded] && [self.view window] == nil)

    {

        // Add code to preserve data stored in the views that might be

        // needed later.

        // Add code to clean up other strong references to the view in

        // the view hierarchy.

self.view = nil;

    }

最近才知道  iOS 6.x 要加入這些code

然後Xcode還不會自動產生  = ="

不過遇到了一些詭異的問題....

iOS 5.x 在某些狀況下 wm兩次會crash....

還不知道發生了什麼事情orz

2013年3月31日 星期日

[ObjC] objc_setAssociatedObject

之前遇到的問題是 …… Category 怎樣新增變數在物件中....

我那時只知道 dynomic … 然後就不知道下一步了

今天看到別人分享了這個

https://github.com/MugunthKumar/UIKitCategoryAdditions

想說之前就有遇到因為static 所以同時間只能使用一個Alert的問題


不過看來他10個月前就改好了orz....


anyway 重點是...

objc_setAssociatedObject

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html

之後如果有遇到類似需求會用這個做作看


不過還有一點不是很清楚

其中第二個param 建議是用一個static的char值,看到到有討論區的說法是他只是指標位置

還是不了解如果當實體化兩個物件時,還是會共用到同一個static的值,會互相影響到嘛?


2013年3月24日 星期日

[UnitTest] 單元測試的概念修正

公司的案子正好告一段落

我開始去把之前找的到一資源在看一看

 

之前翻到  TDD的文章

http://www.dotblogs.com.tw/hatelove/Default.aspx

我看了 [30天快速上手TDD] 系列的文章(還沒看完),

突然有一些之前的悶點,豁然開朗

 

之前有照網路上的一些文章寫了一些UnitTest,

也將UnitTest放到 CI中

但是始終覺得怪怪的

 

看了他的day 1~Day 6

才發現我對Unit Test的概念還是處於模糊的階段  XD

原來我之前寫的Unit Test  其實可能只能算是整合測試

而且我的物件寫法相依性也太過於高

太過於龐大

測試的目標也應該定在物件的public funciton才是

 

之後可能會在將物件拆的更細緻一些

降低耦合性   多利用 IoC  

來實踐比較適合的Unit Test

 

2013年3月12日 星期二

purgeIdleCellConnections: found one to purge conn

purgeIdleCellConnections: found one to purge conn

似乎官方本身就有回答:

https://developer.apple.com/library/ios/#qa/qa1774/_index.html#//apple_ref/doc/uid/DTS40012992

 

不過就內文的意思看起來,只是正好iOS6.x 有log出來給你看,原本的這個機制已經存在再其他版本的iOS中了!

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

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

2013年1月31日 星期四

Jenkins - android + ant + iOS + Xcode (ota 設定)

ota 已經完成 一個月左右了

可是一直忘了上來記錄一下XD



我後來在額外加入shell  去執行

https://github.com/sveinungkb/ios-ota-buddy



shell :

mv build/*.ipa build/${JOB_NAME}-${BUILD_NUMBER}.ipa


otabuddy.sh plist build/${JOB_NAME}-${BUILD_NUMBER}.ipa http://xxx/${JOB_NAME}/builds/${BUILD_NUMBER}/ooo/${JOB_NAME}-${BUILD_NUMBER}.ipa build/${JOB_NAME}-${BUILD_NUMBER}.plist



寄出去的信件連結為:
<a href="itms-services://?action=download-manifest&url=http://ㄌ/${JOB_NAME}/builds/${BUILD_NUMBER}/ooo/${JOB_NAME}-${BUILD_NUMBER}.plist">


以上主要是  背後把
http://xxx/  的位置  多一個 ln  到  build/  中

讓http server  直接能下載的到..... 不過這樣  當然沒有密碼的保護了orz


如何參與 開放原碼社群

http://people.debian.org.tw/~chihchun/2011/07/18/work-with-open-source-project/


說是給大一大二...

看來我的能力真的還只在大一大二  .... 淚

2013年1月24日 星期四

iOS rotation problem on iOS5 & iOS6 (續)

因為top-most  controller


所以只好耍一點方法來做

將專案的選轉方向設定成 n 個

然後依照每個 navigation 來決定要不要轉

如果遇到轉或不轉交替的VC

就在多套一個navigation  來隔開

(不過我似乎記得有一篇文章不建議navigation push navigation)

2013年1月7日 星期一

iOS Auto test

http://www.stewgleadow.com/blog/2011/10/26/which-automated-ios-testing-tool-to-use/


可能會選擇 KIF  or  UIAutomatic  (不過要先跟 cocoapod合合看)

有實驗過 Frank  不過 他似乎跟 cocoapod不合 ...  (另問文章中也有提到,他對手勢的支援度低)








iOS Automated Tests with UIAutomation

http://blog.manbolo.com/2012/04/08/ios-automated-tests-with-uiautomation






這篇還沒有仔細看過...


2013年1月6日 星期日

iOS rotation problem on iOS5 & iOS6

http://blog.csdn.net/totogogo/article/details/8002173


for ios6的top-most controller决定orientation设置,导致这样一个问题:在 top-most controller里的views无法拥有不相同的orientation设置。例如:for iphone, 在nav controller里,你有main view, sub view and sub sub view,前2个都只能打竖,而sub sub view是用来播放video,可以打横打竖。那么在ios 4 and 5里可以通过在main view and sub view的shouldAutorotateToInterfaceOrientation里设置只能打竖,而在sub sub view的shouldAutorotateToInterfaceOrientation设置打竖打横即可。而在ios 6里则无法实现这种效果,因为在main view, sub view and sub sub view的orientation设置是无效的,只能够在nav controller里设置。

orz

iOS UIWebview something

http://www.cocoachina.com/applenews/devnews/2013/0105/5473.html


備存  之後會用到