如下
2013年12月25日 星期三
2013年12月16日 星期一
[iOS] posing class
看到了一個有趣的少用的技術 posing
http://www.tutorialspoint.com/objective_c/objective_c_posing.htm
http://www.cnblogs.com/IT-Chris/archive/2013/03/10/2953176.html
裡面提到
hmm.... 在某些情況下確實可以用用看
可以很輕鬆的阻斷加入要做的事情@@
2013年12月12日 星期四
[ROR] 後台建立 - 權限建立
目標
1. 用 Device註冊帳號的初始帳號都是一般權限
2. 有一個網頁可以修改某個user為 admin的權限
3. 每個user都可以看某個頁面,但是因為權限不同而會不同
2013年12月9日 星期一
2013年11月16日 星期六
[iOS] Web api with CoreData
像是 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 的 思
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 重灌筆記
- 分割磁區
- 軟體
- Chrome
- Xcode
- 需要保留 4.6.3 & 5.0 (for iOS 5 模擬器)
- 可能在一陣子就不用測試 iOS 5
- profiles
- p12
- color plugin
- 輸入法
- yahoo輸入法
- MacHeist (Paid)
- fantastical
- CleanMyMac 2
- AirServer
- NotesTab
2013年11月5日 星期二
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
那就只好設定了
我也不確定實機上會有不有問題
不過如果是模擬器上面
english 沒有勾選,似乎會讓setting找不到 Main.storyboardc
我猜可能是Base.proj 的關係(似乎 iOS6 or 7 有把storyboard的多語系改成 一個 storyboard 配合多 string file的模式,恩 這樣感覺也比較合理)
過度時期,先這樣做吧
2013年9月29日 星期日
[ROR] Turbolink, ajax, jQuery, coffeescript, Asset Pipeline
緣由:
想在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的位置就好了
2013年9月21日 星期六
[ROR] heroku, postgres,
有在嘗試的 Paas
原本在試驗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日 星期日
[雜] 有趣的網址
軟體文件的範例....
不過有趣的是最後一張圖XD
2013年9月12日 星期四
2013年9月10日 星期二
[XCode] 想要備份一下舊的XCode
sudo
xcode-
select
-switch
/Application/Xcode
\ 4.3.3.app
/Contents/Developer/
不過不確定怎麼用
查察看
[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:
-
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.
-
OPEN terminal application and go to the folder created above (using CD command)
-
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
簡介個方法
http://guides.ruby.tw/ruby/about.html
在 Wiki 中找到 Closure 的資料,其中有的一段 Ruby 程式碼清楚闡述了 Proc 和 Lambda的差別:
2013年7月14日 星期日
2013年6月30日 星期日
2013年6月28日 星期五
[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://www.youtube.com/watch?v=cF1Rf02QvZQ
現在用的方法有點不是很恰當
另外也還不確定iOS 7 是否會有bug
….
--
事情太多了.... 真難慢慢去實驗
2013年6月5日 星期三
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
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();
把畫紙推到最前面去畫 然後再推回來
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://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年5月12日 星期日
2013年5月11日 星期六
[Obj-C] 保留字的介紹
http://www.learn-cocos2d.com/2011/10/complete-list-objectivec-20-compiler-directives/#encode
下次應該會思考一下 @defs & @encode用的時機....
[Obj-C] Obj-C Optimization: IMP Cacheing Deluxe
http://www.mulle-kybernetik.com/artikel/Optimization/opti-3-imp-deluxe.html
看到一些技法
如果跳過直接使用 CF function
似乎就可以快很多....
(toNOTE 裡面的一些迴圈處理似乎可以用這個加速)
[Obj-C] private
http://stackoverflow.com/questions/2158660/why-doesnt-objective-c-support-private-methods
英文不好 要花點時間看.... orz
不過討論 private 與 public 感覺是有趣的 XD
2013年5月6日 星期一
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日 星期五
[iOS] Core Data - Data type - allow external Stroge
http://bluecrowbar.com/blog/2011/08/coredata-external.html
如果遇到儲存資源可能會比較大的話
就需要勾選
他會幫你處理,如果data太大,他會自動用file system 作檔案,然後關聯到uri,以避免直接存入DB中
2013年4月15日 星期一
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.tmbuilderkeymv 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
之後如果有遇到類似需求會用這個做作看
不過還有一點不是很清楚
其中第二個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 messagegit 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讀取的而Email 呢? 我這裡是希望mail 送出Html的格式出來,而他是用 Big5 讀取的所以在使用 ${FILE, path="…..txt"} 之前要先用iconv -f UTF-8 -t BIG5 GIT-Log-Report.txt > GIT-Log-Report.BIG5.txt產生big5 的檔案,最後產生的script :然後再使用 ${FILE, path="GIT-Log-Report.BIG5.txt"}將資料印到 Email 上 :
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,那就照同樣的處理方式吧!然後在 Jenkins 上 使用script並且在report Email 中加入最後會在Email中看到不過,現在即便是失敗了.... 信件還是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
接著我就遇到了
"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/
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
似乎是等使用者來自己幫忙翻譯,
不過可能也要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 設定)
可是一直忘了上來記錄一下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
如何參與 開放原碼社群
說是給大一大二...
看來我的能力真的還只在大一大二 .... 淚
2013年1月24日 星期四
iOS rotation problem on iOS5 & iOS6 (續)
所以只好耍一點方法來做
將專案的選轉方向設定成 n 個
然後依照每個 navigation 來決定要不要轉
如果遇到轉或不轉交替的VC
就在多套一個navigation 來隔開
(不過我似乎記得有一篇文章不建議navigation push navigation)
2013年1月15日 星期二
2013年1月7日 星期一
iOS Auto test
可能會選擇 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
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