[iOS] CocoaPods 套件管理工具的安裝

最近終於決定踏入 iOS 開發的領域,要寫 iOS,除了要有一台 Mac 之外,還得要安裝 4.43 GB 的 Xcode。然而,Xcode 不像 Android Studio 使用 Gradle 做套件管理和自動化建置,它需要依靠第三方工具來做套件管理,較著名的是 CocoaPods。

安裝 CocoaPods

在安裝之前,請執行下面的指令,先將 Ruby 升級到最新版本
sudo gem update --system

然後開始安裝 CocoaPods
sudo gem install cocoapods

這樣就裝好了

設定 CocoaPods

完成安裝之後,要執行下面的指令,
pod setup
你會發現,它會停在「Setting up CocoaPods master repo」沒有反應,其實背後是在執行程式下載的動作。

也可以使用 --verbose 參數,顯示安裝過程
pod setup --verbose
等待約十五分鐘才會執行完畢,這個設定的動作是將程式下載到 /.cocoapods 目錄下,可以查看這個目錄的大小,有 852 MB!


參考資料:[StackOverflow] Pod install is staying on 「Setting up CocoaPods Master repo」

開始使用 CocoaPods 管理套件

首先,在專案根目錄下執行以下指令,它會自動生成 Podfile 設定檔
pod init
使用文字編輯器編輯 Podfile,加入你要使用的第三方套件。

最後執行安裝指令。
pod install
需等待一段時間,套件會被安裝到 /Pod 目錄下,還會產生 XXX.xcworkspace 檔案,之後要開你的專案就要選這個檔案,不是 XXX.xcodeproj。

分類:

[Android] 使用 Calligraphy 自訂字型

要更改 Android App 的字型,正常的做法是使用 setTypeface,改變 TextView 的字型。可是一旦要變更的 TextView 很多的時候,修改起來相當費時。

Calligraphy 這個函式庫使用注入的方式,自動尋找 Activity 中 TextView,並設置其使用的字型。

先安裝函式庫,然後將你要變更的字型檔放到 assets/ 目錄下
dependencies {
    compile 'uk.co.chrisjenx:calligraphy:2.2.0'
}

在 Application 的 onCleate 初始要使用的字型
@Override
public void onCreate() {
    super.onCreate();
    CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                     .setDefaultFontPath("fonts/Roboto-Regular.ttf")
                     .setFontAttrId(R.attr.fontPath)
                     .build()
            );
    //....
}
然後在 Activity 的 attachBaseContext 方法中注入 CalligraphyContextWrapper。
@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}

這個 Activity 中的 TextView 字型就會全部改變了,如果有 BaseActivity 的話,建議加在 BaseActivity。

分類:

GTmetrix 網站檢測工具

GTmetrix 是一個線上的網站檢測分析工具,它在全世界 7 個地區(香港、雪梨、巴西聖保羅、溫哥華、美國達拉斯、倫敦、印度孟買)佈建 13 台伺服器。透過這些伺服器的分析,提供使用者效能最佳化的建議。

GTmetrix 首頁可以直接輸入網址分析。首頁的測試只能使用溫哥華的主機,以及 Firefox 瀏覽器做測試。如果要使用其他地區的主機,和 Chrome 瀏覽器測試的話,要另外申請帳號登入做測試。

測試結果有兩個分數:PageSpeed Score 和 YSlow Score,分數越高越好。在下方會列出建議修改的項目。

用帳號登入後,可以選擇測試伺服器的地區、欲測試的瀏覽器種類、以及連線類型

GTmetrix 可以設定定期監控某個網站,當監控值分數過低時會發通知,不過免費版本只能選用溫哥華的測試伺服器。檢測頻率則可選擇每天、每週或每月。


這個網站還有一個有趣的功能,它會檢測 Google 公布的前一千大網站


GTmetrix 也有提供 REST API,可與外部系統整合。因此我們可以整合至 CI 系統,當程式部署之後,可以馬上執行 GTmetrix 檢測。



分類:

[Android] MultiDex

因為前陣子的程式做了重構,加入了 RxJava 相關函式庫,導致 App 內的 Method 總數超過 64435 個,導致 App 無法編譯,於是參考 Google 建議的做法,解決這個問題。
在 App 層級的 build.gradle 加入 multiDexEnabled true
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 21
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}
如果 App 支援 Android 4.x 的話,要額外做以下的步驟,否則會出現以下的錯誤。
Exception java.lang.NoClassDefFoundError: rx.plugins.RxJavaHooks
rx.Observable.create (Observable.java:98)
retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$SimpleCallAdapter.adapt (RxJavaCallAdapterFactory.java:233)
retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$SimpleCallAdapter.adapt (RxJavaCallAdapterFactory.java:219)
retrofit2.Retrofit$1.invoke (Retrofit.java:147)
首先要引用 Multidex 函式庫
compile 'com.android.support:multidex:1.0.1'
然後,在 Application class 要改成繼承 MultiDexApplication
public class BaseApplication extends MultiDexApplication {
...
}
如果 Application 已繼承自定的方法,也可以直接覆寫 attachBaseContext 方法
@Override 
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base); 
    MultiDex.install(this);
}

結語

Android 的第三方函式庫固然好用,畢竟不用自己造輪子,可是用多了第三方函式庫的話,很容易超過 Android 64K 方法數的限制。即便用了 MultiDex 突破 64K 方法數的限制,可是 MultiDex 可能會有 App 啟動時間過長的問題,在使用前還是事先要評估一下,拿掉不必要的第三方函式庫,也許才是正解。

參考資料


分類:

Copyright © Andy Cheng

Distributed By My Blogger Themes | Blogger Theme By NewBloggerThemes Up ↑