2014年12月31日 星期三

在iOS專案引入外部Library的另一種選擇 - git subtree

CocoaPods

CocoaPods可說是目前iOS coder之間最流行的module管理方式,CocoaPods非常適合那些自己很少去維護的外部library,通常都是等別人更新完之後自己下pod update更新。但是當我們也需要經常性的去維護這個library時,我們需要在另外一個git repository修改,然後在自己的專案下pod update指令更新,實在很麻煩!

Git Subtree

那麼對於需要經常去修改的pod,我們就可以採用Git Subtree來管理。使用Git Subtree來管理的好處是什麼呢?

  1. 原有的工作流程不會被打斷,只需要照平常一樣commit就好,更新library的遠端repository只要再打一行指令就好,要從遠端repository把更新拉下來一樣只需要一行指令。
  2. 新專案成員把repository clone下來之後不用再另外下指令更新sub tree,全部的東西都已經被clone下來了

參考:
https://medium.com/medium-eng/how-we-modularized-mediums-ios-codebase-8f8f26965c76
http://yutin.logdown.com/posts/188306-git-subtree-total-addendum-library
http://www.lemonlatte.tw/posts/175465-git-subtree-trial
http://www.xiwan.info/subtree-detach-subdirectory-into-separate-repository.html

2014年12月25日 星期四

Xcode 6已經內建類似Reveal的新功能

目前在Xcode裡查看view hierarchy有幾個比較知名的工具,像是RevealSpark
現在Xcode 6內建了一個很類似的功能,不過功能就沒有這麼完整。
inspector

定位按鈕左邊那顆就是了。

效果如下圖
inspector2

還可以看frame以及autolayout的constraint。
inspector3

其實這些基本功能就很夠用了,對我來說就可以把買Reveal的錢省下來了XD。
更詳細的介紹可以參考Xcode 6视图调试小贴士

2014年12月15日 星期一

在iOS App實作Airplay Audio功能

前言

由於Airplay開發者能控制的部分還不多,所以只能透過在自訂播放介面加入MPVolumeView的方式開啟Airplay的功能。

實作

如果需要包含內建的音量控制元件

MPVolumeView *volumeView = [ [MPVolumeView alloc] init] ;
[view addSubview:volumeView];

如果不需要

MPVolumeView *volumeView = [ [MPVolumeView alloc] init] ;
[volumeView setShowsVolumeSlider:NO];
[volumeView sizeToFit];
[view addSubview:volumeView];

在iOS裡聲音可以分為兩大類,App sound跟System sound,System sound做為按鍵回饋或是警示聲使用,剩下的就是App sound。在MPVolumeView選擇了Airplay裝置之後,系統會自動把App sound導到支援Airplay的裝置上。

在iOS7,MPVolumeView新增了兩個property

@property areWirelessRoutesAvailable;  
@property isWirelessRouteActive; 

以及兩個通知

NSString *const MPVolumeViewWirelessRoutesAvailableDidChangeNotification;  
NSString *const MPVolumeViewWirelessRouteActiveDidChangeNotification; 

可以偵測到有airplay以及使用者改變了airplay route,如果想要在偵測到可以使用Airplay裝置時加入動畫這會是一個好的實作方法。