MacにCocoaPods、Homebrew、carthago、renv、bundlerのインストール

環境

Mac OS 10.12.3

CocoaPodsインストール

1.インストール

MacにはデフォルトでRubyがインストールされているので、それを前提に進めていきます。以下のコマンドを実行します。

$ sudo gem update --system // ruby gemを最新にする
$ sudo gem install cocoapods // CocoaPodsのインストール
$ pod setup // CocoaPodsのセットアップ
Setting up CocoaPods master repo
Setup completed (read-only access)

2.利用

Xcodeのプロジェクトフォルダ直下に「Podsfile」という名前のファイルを置きます。

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'myproject_ios' do
pod 'SwiftCop'
pod 'ReachabilitySwift', '~> 3'
end

Posfileと同じ階層で以下のコマンドを叩くと、指定したライブラリがインストールされます。

$ pod install

Homebrewのインストール

Homebrewはパッケージのインストール(アンインストール)作業を一元的管理するものです。インストール先は /usr/local になります。

Homebrewのサイトを見ると、以下のコマンドが記載されているので、それをコピーして実行し、インストールします。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

次にbrew doctorを実行します。これは、Homebrewのインストールやその後の使用に問題がないか確認するためのコマンドです。

$ brew doctor

バージョンを確認します。

$ brew -v
Homebrew 1.1.10
Homebrew/homebrew-core (git revision 465a; last commit 2017-02-15)

なお、一応Homebrewのupdateを行っておきます。
時々実行してupdateしておくとよいと思います。

$ brew update

その他便利コマンド

homebrewの基本コマンドを少し載せておきます。

パッケージ検索

$ brew search

パッケージインストール・アンインストール

$ brew install  // インストール
$ brew remove  // アンインストール

パッケージの有効化・無効化

$ brew link // 有効化
$ brew unlink // 無効化

パッケージされたリストの表示

$ brew list

3. carthagoのインストール

以下のコマンドを実行し、brewを使ってインストールします。
(※久しぶりにbrewを使う場合は、$ brew updateをしておくと良いでしょう。)

$ brew install carthage

インストールされているかは以下のコマンドで確認できます。
brewでインストールされたものの一覧が表示されます。

$ brew -v list

4.renvのインストール

MacにはデフォルトでRubyがインストールされていますが、それを利用するとバージョンによる影響がでるので、複数バージョンを管理することができるrbenvを入れます。

$ brew install rbenv ruby-build

バージョンを確認します。

$ rbenv --version

インストールするrubyのバージョンを確認するために、リストで候補を表示します。

$ rbenv install -l

今回はリストの中から最新版をインストールします。

$ rbenv install 2.4.0

インストールしたRubyは以下のコマンドで確認します。

$ rbenv versions

rubyのバージョン切り替え

rubyのバージョン切り替えは、以下でglobalを使って切り替えます。
(※一部プロジェクトに適応したい場合はlocalで変更します。)

$ ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
$ rbenv global 2.1.0
$ ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin15.0]

5. bundlerのインストール

RubyのプラグインであるGemは普通に使うとグローバルに入ってしまいますが、それを避けて、特定ディレクトリに入れる仕組みがbundlerです。
そのbundlerをインストールします。(パーミッションのエラーがでたので、/usr/local/binにインストールしました。)

$ sudo gem install -n /usr/local/bin bundler

新しいgemを入れた場合は、rbenvでrehashしないと、パスが通っていなかったりするそうなので、実行します。

$ rbenv rehash
$ bundler -v
Bundler version 1.12.4

bundlerの設定ファイルを作成します。bundler initを実行すると、Gemfile というファイルができるので入れたいGemを記述します。以下はcocoapodsを例に記述しています。

$ bundler init

以下はGemfileの例です。

# frozen_string_literal: true
# A sample Gemfile
source "https://rubygems.org"

gem 'cocoapods' , '0.39.0'

※Gemfileの詳しい書き方は「gemfile – リファレンス – – Railsドキュメント」をご参照ください。

Gemfile に書いた内容をインストールするには、以下のコマンドを実行します。インストール先のディレクトリとしては.venderを指定します。

$ bundle install --path=.vendor

App Group

iOS8のリリースで、新しいアプリ間情報共有機能「App Group」が使えるようになったようです。
「App Group」について調べてみました。

#App Groupとは
App Groupとは、複数のアプリの間でデータを共有できるようになる新しい機能です。
アプリとアプリの間、アプリとAppExtensionの間でデータ受け渡しをすることができます。App Groupを使うと、NSUserDefaultsを使った設定情報の共有とNSFileManagerを使ったファイルの共有ができます。

ただし、違う会社からリリースされているアプリの間での情報共有はできなくなっています。
同じDeveloperからリリースされているアプリである必要があります。
なお、App Group で共有されるデータの格納領域は、App Group に所属する個々のアプリの
サンドボックスとは別となっており、独立したローカルストレージ領域が割り当てられます。
そのローカルストレージの領域に対してデータの永続化を行うことによってデータを共有します。

ローカルストレージ内には任意のファイルを書き込むことができるため、SQLite のファイルを作成して
DB を共有することもできます。
UserDefaults に関しても独立した領域が割り当てられ、設定等の情報を共有することができます。
App Group によって定義される共有領域のことを shared container と言います。
個々の shared container は Bundle Identifier のような識別子によって管理されます。

#App Groupをつかってみよう
App Groupを使って情報共有をしてみます。手順は以下の通り。

  1. iOS Dev Centerで App GroupのGroup IDを登録
  2. XcodeからApp Groupの設定をonにする
  3. shared userdefaultsとshared containerを試してみる

1.iOS Dev Centerで App GroupのGroup IDを登録

iOS Dev Centerにログインします
https://developer.apple.com/devcenter/ios/index.action

「Certificates, Identifiers & Profiles」のメニューに入り、
以下の画面からIdentifiersの「App Groups」を選択して、「+」ボタンをクリックします。

「App Groups Description」と「Identifier」を入力します。
・App Groups Description
App Groupsの説明、何でもOK
・Identifier
先頭に「group」をつけ、Bundle Identifierと同じようにドメイン名などから
生成した一意な文字列をしていしたほうがよいと思います。

「Continue」ボタンをタップし、画面を進み登録を完了してください。

2.XcodeからApp Groupの設定をonにする

XcodeからTARGET->Capabilityタブを開いてApp Groupの設定をonにします。
App Groupの機能をonにすると、さきほど iOS Dev Centerで設定した
Group IDが表示されるので、チェックボックスにチェックを付けます。
(エラーが出る場合は、TARGET->Generalタブを開いて、
Team部分に警告がないことを確認してください。)

すると、プロジェクトに<プロジェクト名>.entitlementsの名前の
entitlementsファイルが追加されます。

以下が.entitlementsのファイルの中身です。(plist)

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.jp.co.example</string>
</array>
</dict>
</plist>

entitlementsってなんだろうと調べたら、英語のドキュメントですが

Appleの開発ドキュメントに載ってました。

  • Entitlement Key Reference

https://developer.apple.com/library/mac/documentation/Miscellaneous/Reference/EntitlementKeyReference/EntitlementKeyReference.pdf

そこをみると、

エンタイトルメントは、iOSアプリケーションに特定の機能または
セキュリティのアクセス許可を付与する。” と書かれていました。

先ほどのEntitlementファイルのキーにcom.apple.security.application-groupsがありますが、
ここにグループ名”group.jp.co.example”を配列で指定しています。

「Entitlement Key Reference」のP12に、このキーについて
以下のようにも記載してありました。
アプリ間で共有されているグループ·コンテナへのアクセスを可能にし、
アプリケーション間の特定の追加のプロセス間の通信を可能にする ということで、
Entitlementでこのように指定することで、同じグループ名のアプリが
アプリ間で共有されているグループ·コンテナへのアクセス可能になるようです。

3.shared userdefaultsとshared containerを試してみる

App Groupの設定が完了したら、アプリ間で共通につかえるデータ領域が確保されます。
shared userdefaultsとshared containerを試してみます。

A.shared userdefaultsを試す

Group IDを使って、NSUserDefaultsのインスタンスを生成することで、
通常のNSUserDefaults処理と同じように簡単に使えます。

例)

    //sharedDefaultsの保存
    NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc]
                             initWithSuiteName:@"group.com.example"];
    [sharedDefaults setObject:@"ねこ" forKey:@"Name"];
    [sharedDefaults synchronize];   
    //sharedDefaultsの読み込み
    NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc]
                              initWithSuiteName:@"group.com.example"];
    NSString* strValue = [sharedDefaults objectForKey:@"Name"];
    NSLog(@"strValue is %@",strValue);

B.shared containerを試す

NSFileManagerのcontainerURLForSecurityApplicationGroupIdentifierを使い、
Group IDを指定して shared container のパスへのNSURLを取得します。
そのパスにファイル名を付加して、あとは通常通りにsave/loadをすれば大丈夫です。

    // sharedContainerの保存
    NSURL *fileURL = [[NSFileManager defaultManager] 
containerURLForSecurityApplicationGroupIdentifier:@"group.com.example.mygroup"];
    fileURL = [fileURL URLByAppendingPathComponent:@"data.plist"];

    NSDictionary* dict = @{ @"place":@"Tokyo", @"tel":@"03-1234-5678"};
    [dict writeToURL:fileURL atomically:YES];   

    // sharedContainerの読み込み
    NSURL *fileURL = [[NSFileManager defaultManager]
containerURLForSecurityApplicationGroupIdentifier:@"group.com.example.mygroup"];
    fileURL = [fileURL URLByAppendingPathComponent:@"data.plist"];

    NSDictionary* dict = [[NSDictionary alloc] initWithContentsOfURL:fileURL];
    NSString* strPlace = [dict valueForKey:@"place"];

    NSLog(@"strPlace is %@",strPlace);

<参考>
https://developer.apple.com/jp/devcenter/ios/library/documentation/ExtensibilityPG.pdf
http://blog.isana.net/2014/07/ios8-app-extension.html
http://d.hatena.ne.jp/shu223/20140606/1402015233
http://dev.classmethod.jp/references/ios-8-app-group/
http://www.toyship.org/archives/1845
http://dev.classmethod.jp/references/ios8-custom-keyboard/

AutoLayoutで優先度を設定する

AutoLayoutは上下、左右の値の制限を設定したりなどして、
とても便利な機能ですが、「関係」や「優先度」などの設定もできることを知りました。

Auto Layout ガイド(P7)
https://developer.apple.com/jp/devcenter/ios/library/documentation/AutolayoutPG.pdf

以下を抜粋
関係 (Relation)ビューの属性値として、定数値以外に関係式や不等式(≧など)も指定できます。
たとえば幅について「width >= 20」という指定、あるいは要素間に「textview.leading >=
(superview.leading + 20)」といった指定ができるのです。

● 優先度 (Priority level) 制約には優先度を指定できます。優先度の高い制約をまず満たした後で、

優先度の低い制約を考慮するようになっています。デフォルトの優先度は「必須」
(NSLayoutPriorityRequired)というもので、制約を完全に満たさなければならないことを表
します。一方、「必須」優先度でない制約については、完全ではないにしても、できるだけそれ
に近づけようとします。

Xcode6でビルドした時に、UITableViewCellに配置してあるUILabelの可変設定がうまくいかなくて、
Bottom Spaceの制約をEditして、Priorityを”Low(250)”に設定したらうまくいきました。
image1

ちなみにPriorityを”Low(250)”にすると、画面で点線で表示されました。
image2

独自オプションメニューの作成

Androidのオプションメニューはアイコンやメニュー名くらいは好きなものを指定できるのですが、特殊なレイアウトを求められると対応できないので、独自のオプションメニューを作成することになりました。そのときのメモを残します。

1.オプションメニューレイアウトの作成

オプションメニューは画面に重なって表示されるので、RelativeLayoutなどで重ねて作成しておきます。初期値はinvisibleにします。Menu用のレイアウトは別xmlにしておき、includeするのがよいかと思います。

2.オプションメニュー表示Activityソース部

onPrepareOptionsMenuをオーバーライドします。
(例)
private LinearLayout mMenuLayout;
private boolean mIsShowMenu;

@Override
protected void onCreate(final Bundle savedInstanceState) {
mMenuLayout = (LinearLayout) findViewById(R.id.linear_menu_area);
}
・・・・・・

@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
if (mIsShowMenu) {
mMenuLayout.setVisiblity(View.INVISIBLE);
Animation anim = AnimationUtils.loadAnimation(this, R.anim.menu_down);
mMenuLayout.startAnimation(anim);
mIsShowMenu = false;
} else {
Animation anim = AnimationUtils.loadAnimation(this, R.anim.menu_up);
mMenuLayout.startAnimation(anim);
mMenuLayout.setVisiblity(View.VISIBLE);
mIsShowMenu = true;
}
}

3.アニメーション

・menu_down.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<translate xmlns:android=”http://schemas.android.com/apk/res/android
android:interpolator=”@android:anim/decelerate_interpolator”
android:fromYDelta=”0″
android:toYDelta=”100%p”
android:duration=”300″
/>

・menu_up.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<translate xmlns:android=”http://schemas.android.com/apk/res/android
android:interpolator=”@android:anim/decelerate_interpolator”
android:fromYDelta=”100%p”
android:toYDelta=”0″
android:duration=”300″
/>

MacでEclipse 日本語化

システムの開発でよく使うツールEclipseをMacで使おうと、Windowsでも使用していたPreiadesのAll In Oneをダウンロードしようとしたら、これはWindows専用でした(><)

でもよーくみたら、日本語化するための「Pleiades 本体」というものがあり、これを使うと日本語化できそうです。
Mac(OS10.6)にEclipse3.7をインストールする手順は以下の通り。

1.Eclipseのダウンロード

まずは、以下のサイトからEclipseをダウンロードします。
私は、Eclipse IDE for Java EE Developersをダウンロードしました。
ダウンロードしたEclipseは任意の場所に解凍してください。
http://www.eclipse.org/downloads/

2.Pleiades 本体をダウンロード

次に以下のサイトからPleiades本体の安定版1.3.3をダウンロードします。
ダウンロードした「pleiades_1.3.3.zip」は解凍しておきます。
解凍したフォルダの中に、featuresとpluginsがあると思いますが、それは後でEclipseにコピーします。

http://mergedoc.sourceforge.jp/#pleiades.html

3.pluginsとfeaturesの中身をコピー

2でダウンロードして解凍したeclipseフォルダの中にあるpluginsとfeaturesに、1でダウンロードしたpleiades_1.3.3フォルダのpluginsとfeaturesフォルダのなかの「jp.sourceforge.mergedoc.pleiades」と「jp.sourceforge.mergedoc.pleiades」フォルダをコピーします。

※注意:
featuresとpluginsは置き換えでコピーせず、中にあるフォルダjp.sourceforge.mergedoc.pleiades」と「jp.sourceforge.mergedoc.pleiades」をeclipseフォルダの中にあるpluginsとfeaturesにペーストしてください。

4.eclipse.iniに追記

eclipseの初期設定を行うファイル「eclipse.ini」にpleiadesを読み込む設定を行います。
以下のようにeclipseフォルダの中のEclipse.appを右クリックし、「パッケージの内容を表示」を選択してください。

「パッケージの内容を表示」を選択選択すると以下のようにFinderに表示されますので、Contents > MacOS > eclipse.iniと選んでください。

「eclipse.ini」をエディタで開いて、末尾に以下を追加します。

-javaagent:../../../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

追加後、Eclipseを起動します。
eclipseが落ちてしまう場合は、ターミナルから-cleanオプションを付けると起動できます。

4.Android Development Tool(ADT)のインストール

ADTをインストールします。
Eclipseのメニューのヘルプ>新規ソフトウェアのインストールを選択します。
インストールの画面が表示されますので、画面の「追加」ボタンで表示されるポップアップ画面で、以下を入力します。

名前:Android(任意)
ロケーション:https://dl-ssl.google.com/android/eclipse/

入力後、「OK」ボタンをクリックします。
すると、”開発ツール”という項目が出てきますので、選択してインストールしてください。

5.Android SDKの本体のインストール

以下のサイトから、MacOS用のAndroid SDKをダウンロードします。
「android-sdk_r16-macosx.zip」をダウンロード後、任意の場所に解凍してください。

http://developer.android.com/sdk/index.html

「android-sdk_r16-macosx.zip」を解凍してできたフォルダ「android-sdk-mac_x86」をEclipseで設定します。
Eclipse>環境設定でAndroidを選択します。「SDKロケーション」で先ほど解凍してできたフォルダ「android-sdk-mac_x86」を指定します。
指定後、「適用」ボタンをクリック後、「OK」ボタンをクリックして環境設定の画面を閉じてください。

5.Android仮想デバイス(AVD)のインストール

Eclipseのメニューから、ウィンドウ > Android SDK および AVD マネージャーを選択し、「Android SDK and AVD Manager」を開きます。
画面左側[Available Packages]を選択し、[SDK Platform]と[Google APIs]にチェックを入れて[Install Sellected]をクリックし、インストールします。

6.「.bash_profile」の作成

最後にAndroidアプリの開発時に使用するコマンドが簡単に使えるように、パスを通します。
まず、ターミナルを起動します。

ユーザーのホームディレクトリで以下のコマンドで「.bash_profile」を開きます。
(ログイン時は既にホームディレクトリになっているので、そのままコマンドを実行してください。)
vi  .bash_profile

キーボードの「i」を押して入力モードにします。

以下をコピーして貼り付けます。
export PATH=$PATH:/Applications/android-sdk-mac_x86/platform-tools:/Applications/android-sdk-mac_x86/tools

※上記の内容は、「android-sdk-mac_x86」の場所によって変わりますので、カスタマイズしてください。

「エスケープ」キーを押して、「:wq」と入力して保存します。

これで、パスが通りました。
一度ターミナルを終了し、再度ターミナルを起動します。

以下のコマンドが認識すれば、OKです。
 adb devices

上記のコマンドは、接続しているデバイスが表示されます。デバイスが無い場合、以下が表示されます。認識され、表示されればパスは通っていますので、OKです。
List of devices attached

もう1つ。以下のコマンドも認識するか実行してみてください。
 android list

以下が表示されます。表示されればOKです。
Available Android targets:
id: 1 or “android-3”
Name: Android 1.5
Type: Platform
API level: 3
Revision: 4
Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
(続く・・・)