Monthly Archives: 6月 2014

yum updateで ‘Error: Package: matahari-****’

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

CentOS6.2でyum updateしたらMatahari関連のエラーが大量に。

Error: Package: matahari-host-0.4.4-11.el6.x86_64 (@anaconda-CentOS-201112091719.x86_64/6.2)
    Requires: libqpidclient.so.5()(64bit)
    Removing: qpid-cpp-client-0.12-6.el6.x86_64 (@anaconda-CentOS-201112091719.x86_64/6.2)
        libqpidclient.so.5()(64bit)
    Updated By: qpid-cpp-client-0.14-22.el6_3.x86_64 (base)
        Not found
Error: Package: matahari-service-0.4.4-11.el6.x86_64 (@anaconda-CentOS-201112091719.x86_64/6.2)
    Requires: libqpidcommon.so.5()(64bit)
    Removing: qpid-cpp-client-0.12-6.el6.x86_64 (@anaconda-CentOS-201112091719.x86_64/6.2)
        libqpidcommon.so.5()(64bit)
    Updated By: qpid-cpp-client-0.14-22.el6_3.x86_64 (base)
        Not found
Error: Package: matahari-agent-lib-0.4.4-11.el6.x86_64 (@anaconda-CentOS-201112091719.x86_64/6.2)
    Requires: libqpidclient.so.5()(64bit)
    Removing: qpid-cpp-client-0.12-6.el6.x86_64 (@anaconda-CentOS-201112091719.x86_64/6.2)
        libqpidclient.so.5()(64bit)
    Updated By: qpid-cpp-client-0.14-22.el6_3.x86_64 (base)
        Not found

・・・・

Error: Package: matahari-network-0.4.4-11.el6.x86_64 (@anaconda-CentOS-201112091719.x86_64/6.2)
    Requires: libqpidclient.so.5()(64bit)
    Removing: qpid-cpp-client-0.12-6.el6.x86_64 (@anaconda-CentOS-201112091719.x86_64/6.2)
        libqpidclient.so.5()(64bit)
    Updated By: qpid-cpp-client-0.14-22.el6_3.x86_64 (base)
        Not found

 

どうやらプロジェクトは終了しているようで、MatahariはCentOS6.4までdeprecatedで、CentOS6.5からは削除されているとのこと。

# yum remove matahari-*

すべて削除しました。


CentOS6にRuby on Rails環境を構築する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

■前提条件

・CentOS release 6.2 (Final)
・Ruby 2.1.2
・Rails 4.1.2
・システムワイドな環境の構築
・root権限付きのアカウントで作業
→ 無用な事故を防ぐために適時sudoに切り替えながらの作業を推奨しますが、CentOS6系のデフォルトだとPATHが引き継がれなかったりしますので要注意です(詳細はsecure_pathでGoogle先生に)。

■事前準備

GitHubからファイルを取得しますので、まずGitが必要です。

# yum -y install git

依存ライブラリとしてOpenSSLも必要です。

# yum -y install openssl-devel

このパッケージが足りない場合、rubyのインストール時に

BUILD FAILED
・・・
The Ruby openssl extension was not compiled. Missing the OpenSSL lib?

のように怒られます。

それぞれ、すでにインストールしている場合は飛ばしても構いません。準備が整ったら、インストールを開始します。

■インストール

(1)rbenvをインストールします。

# cd /usr/local
# git clone https://github.com/sstephenson/rbenv.git rbenv
Initialized empty Git repository in /usr/local/rbenv/.git/
remote: Reusing existing pack: 1889, done.
remote: Total 1889 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1889/1889), 297.15 KiB | 183 KiB/s, done.
Resolving deltas: 100% (1182/1182), done.

 

(2)PATHの設定を全ユーザに反映させるため下記のファイルを生成します。

# vi /etc/profile.d/rbenv.sh 

以下の内容を記述します。

export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"

 

(3)保存したら反映させます。

# source /etc/profile.d/rbenv.sh

 

(4)正しくインストールされたかどうか確認してみます。

# rbenv
rbenv 0.4.0-98-g13a474c
Usage: rbenv <command> [<args>]

Some useful rbenv commands are:
 commands List all available rbenv commands
 local Set or show the local application-specific Ruby version
 global Set or show the global Ruby version
 shell Set or show the shell-specific Ruby version
 rehash Rehash rbenv shims (run this after installing executables)
 version Show the current Ruby version and its origin
 versions List all Ruby versions available to rbenv
 which Display the full path to an executable
 whence List all Ruby versions that contain the given executable

See `rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/sstephenson/rbenv#readme

 

(5)ruby-buildをインストールします。

# git clone git://github.com/sstephenson/ruby-build.git rbenv/plugins/ruby-build
Initialized empty Git repository in /usr/local/rbenv/plugins/ruby-build/.git/
remote: Reusing existing pack: 3534, done.
remote: Total 3534 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3534/3534), 595.99 KiB | 244 KiB/s, done.
Resolving deltas: 100% (1703/1703), done.

 

(6)rubyをインストールします。

まず、インストール可能なバージョンを確認してみます。

# rbenv install --list
Available versions:
 1.8.6-p383
 1.8.6-p420
 ・・・・
 2.0.0-preview2
 2.0.0-rc1
 2.0.0-rc2
 2.1.0
 2.1.0-dev
 2.1.0-preview1
 2.1.0-preview2
 2.1.0-rc1
 2.1.1
 2.1.2
 2.2.0-dev
 jruby-1.5.6
 ・・・・
 ree-1.8.7-2012.02
 topaz-dev

今回は 2.1.2 を入れてみます。マシンスペックにもよりますが、インストール完了まで少し時間がかかります。

# rbenv install 2.1.2
Downloading ruby-2.1.2.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/f22a6447811a81f3c808d1c2a5ce3b5f5f0955c68c9a749182feb425589e6635
Installing ruby-2.1.2...
Installed ruby-2.1.2 to /usr/local/rbenv/versions/2.1.2

 

(7)rbenvの管理下にあるrubyバージョンで利用可能なコマンドへのスクリプトを生成します。

# rbenv rehash

rehashは面倒ですので、自動化させるためにrbenv-rehashをインストールしましょう。

# gem install rbenv-rehash
Fetching: rbenv-rehash-0.3.gem (100%)
Successfully installed rbenv-rehash-0.3
Parsing documentation for rbenv-rehash-0.3
Installing ri documentation for rbenv-rehash-0.3
Done installing documentation for rbenv-rehash after 0 seconds
1 gem installed

これで、rubyやgemのインストール毎にrehashを実行する手間を省くことができます。

 

(8)インストールしたバージョンをシステムのデフォルトに設定します。

# rbenv global 2.1.2

 

(9)RDocをインストールします。

# gem install rdoc
Fetching: rdoc-4.1.1.gem (100%)
rdoc's executable "rdoc" conflicts with /usr/local/rbenv/versions/2.1.2/bin/rdoc
Overwrite the executable? [yN] y
rdoc's executable "ri" conflicts with /usr/local/rbenv/versions/2.1.2/bin/ri
Overwrite the executable? [yN] y
Depending on your version of ruby, you may need to install ruby rdoc/ri data:

<= 1.8.6 : unsupported
 = 1.8.7 : gem install rdoc-data; rdoc-data --install
 = 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!
Successfully installed rdoc-4.1.1
Parsing documentation for rdoc-4.1.1
Installing ri documentation for rdoc-4.1.1
Done installing documentation for rdoc after 18 seconds
1 gem installed

 

(10)Ruby on Railsをインストールします。

マシンスペックにもよりますが、インストール完了まで少し時間がかかります。

# gem install rails
Fetching: thread_safe-0.3.4.gem (100%)
Successfully installed thread_safe-0.3.4
Fetching: minitest-5.3.5.gem (100%)
Successfully installed minitest-5.3.5
Fetching: tzinfo-1.2.1.gem (100%)
Successfully installed tzinfo-1.2.1
Fetching: i18n-0.6.9.gem (100%)
Successfully installed i18n-0.6.9
Fetching: activesupport-4.1.2.gem (100%)
Successfully installed activesupport-4.1.2
Fetching: erubis-2.7.0.gem (100%)
Successfully installed erubis-2.7.0
・・・・
Installing ri documentation for rails-4.1.2
Parsing documentation for railties-4.1.2
Installing ri documentation for railties-4.1.2
Parsing documentation for sprockets-2.12.1
Installing ri documentation for sprockets-2.12.1
Parsing documentation for sprockets-rails-2.1.3
Installing ri documentation for sprockets-rails-2.1.3
Parsing documentation for thor-0.19.1
Installing ri documentation for thor-0.19.1
Parsing documentation for thread_safe-0.3.4
Installing ri documentation for thread_safe-0.3.4
Parsing documentation for tilt-1.4.1
Installing ri documentation for tilt-1.4.1
Parsing documentation for treetop-1.4.15
Installing ri documentation for treetop-1.4.15
Parsing documentation for tzinfo-1.2.1
Installing ri documentation for tzinfo-1.2.1
Done installing documentation for actionmailer, actionpack, actionview, activemodel, activerecord, activesupport, arel, builder, bundler, erubis, hike, i18n, mail, mime-types, minitest, multi_json, polyglot, rack, rack-test, rails, railties, sprockets, sprockets-rails, thor, thread_safe, tilt, treetop, tzinfo after 671 seconds

 

(11)正常にインストールできたようですので、確認してみましょう。

# ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
# rails -v
Rails 4.1.2

これでOKです。


CloudCore VPSにCentOS6をインストールする

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

放置していたCloudCore VPSを再度セットアップする機会がありましたので、CentOS 6をインストールするところまで記述しておきます。インストール段階では特別な設定はせず、インストール後に必要に応じて構成していくポリシーですので、ミニマムでのインストールで進めます。求める構成や環境によっては、適時読み替えるか手順を変えてください。

インストール前にCloudCore VPSのコントロールパネル(以降、コンパネ)の「ダッシュボード」にて仮想サーバー情報(IPv4アドレス、サブネットマスク、デフォルトゲートウェイ、プライマリDNS、セカンダリDNS)をどこかに記録しておくか、すぐに確認できる状態にしておいてください。これらの情報はインストール時に必要になります。

それではインストールしてみましょう。

コンパネの「OSインストール」選択しOSインストール画面にて、OSの選択、VNSのキーマップ、Virtioをそれぞれ以下のように設定します。

・OSの選択
→ CentOS 6.2 x86_64
・VNSのキーマップ
→ ja
・Virtio
→ ON

 

設定後、確認ボタン押下します。

 

内容に間違いがなければ、実行ボタンを押下します。

 

準備が整ったら、コンパネの「リモートコンソール」を選択します。

 

「VNCコンソールを開く」を選択します。

 

インストーラーが起動しますので、”Install or upgrade an existing system”を選択してEnterキーを押下します。何もせず放置した場合もタイムアウト時にこの設定で実行されます。

 

処理が走ります。

 

“Skip”を選択してEnterキーを押下します。

 

Nextボタンを押下します。モニター解像度によっては見切れているので、下スクロールで表示させてください。マウスポインタをあててクリックか、Tabキーでフォーカスを遷移させてからEnterキーを押下することでNextボタン押下のイベントになりますが、面倒な場合は”Alt”+”N”で代替しましょう。

 

デフォルトの”English”のままで、Nextボタンを押下します。

 

(日本語キーボードを利用している場合は)”Japanese”を選択し、Nextボタンを押下します。

 

“Basic Storage Devices”を選択し、Nextボタンを押下します。

 

Hostnameを設定します。この時点で決まっている場合はそれを、インストール後に設定する場合は取り急ぎデフォルト(localhost.localdomain)のままでOKです。

 

画面左下のConfigure Networkボタンを押下し、小画面を開きます。

 

Wiredタブの”System eth0″を選択し、Editボタンを押下します。

 

“Connect automatically”にチェックを入れ、IPv4 Settingsタブに遷移した後、Methodのプルダウンから”Manual”を選択します。

 

Addresses欄横のAddボタンを押下します。

 

ここで、あらかじめ控えておいた仮想サーバー情報を入力します。

まず、Addressesに以下の情報を入力します。
・Address
→ IPv4アドレス
・Netmask
→ サブネットマスク
・Gateway
→ デフォルトゲートウェイ
次に、DNS servers欄にプライマリDNSとセカンダリDNSをカンマ区切りで入力します。
→ ex) xxx.xxx.xxx.xx, xxx.xxx.xxx.xx

入力を終えたらApplyボタンを押下して小画面に戻り、小画面のCloseボタンを押下し、親画面のNextボタンを押下します。

 

タイムゾーンとしてプルダウンから”Asia/Tokyo”を選択し、Nextボタンを押下します。

 

rootのパスワードを設定します。重要ですので忘れないように書き留めておいてください。

 

“Use All Space”を選択し、Nextボタンを押下します。

 

Write changes to diskボタンを押下します。

 

“Minimal”を選択し、Nextボタンを押下します。

 

インストールが始まります。少し時間を置いて、

 

インストールが終了します。ここでRebootボタンを押下すると、

 

ログイン画面が表示されます。

 

 


UIAlertViewを自動的に閉じたい

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

保存や送信など、何らかの処理(の結果)をUIAlertViewを用いてユーザに通知することは数多くあります。その中には、わざわざUIAlertViewを出すほどではないけど変化には気付いて欲しい、でも、画面を閉じるためにタップさせるのは避けたい、という場面もあります。このような時は画面が自動的に閉じてくれると楽です。

そんな時は、

[alertView dismissWithClickedButtonIndex:0 animated:YES];

でOKです。

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"お知らせ"
                                                    message:@"すぐ消えます"
                                                   delegate:self
                                          cancelButtonTitle:nil
                                          otherButtonTitles:nil];
[alertView show];
[alertView dismissWithClickedButtonIndex:0 animated:YES];

このような感じで使います。


NavigationControllerでのエッジスワイプジェスチャー(スワイプによる階層戻し)を無効にする(iOS7)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

NavigationControllerベースのアプリはエッジスワイプジェスチャーで階層を戻す(前画面に戻る)ことができます。

 

こういうことですね。iPhoneユーザの中には案外気付いていない方もいるのではないでしょうか。地味に便利なのですが、画面の左端、画面上というよりはiPhone本体のフレームから画面に滑らすような操作になりますので、持ち方によってはやり辛いことも。

iOS7から標準でサポートされていますので、NavigationControllerを組み込んだアプリでは意識せずとも実装されますが、アプリの仕様によってはこのデフォルトの機能が他のジェスチャーとの関係でジャマになることがあります。

無効にしてみましょう。

- (void)viewDidLoad
{
    [super viewDidLoad];

	if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
	    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
	}

	・・・・・・・・

iOS6以前では対応していませんので、respondsToSelectorでプロパティの有無をチェックしてから値を設定しています。


GMSMarkerOptionsを使うと”Use of undeclared identifier ‘*****’; did you mean ‘*****’?” のエラー

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

しばらく放置していたアプリのアップデート対応時、組み込んでいたGoogleMaps SDK for iOSを最新版に置き換えてビルドしたときに出ました。最近更新したあるいは新規に開発したものは新しいSDKかつそれに対応したコードなので気付きませんでしたが、以前は以下のように組んでいました。

GMSMarkerOptions *options = [[GMSMarkerOptions alloc] init];
options.position = CLLocationCoordinate2DMake(35.658625, 139.745415);
options.title = @"東京タワー";
options.snippet = @"東京都港区芝公園4-2-8";
[self.mapView addMarkerWithOptions:options];

GMSMarkerOptionsクラスはGMSMarkerクラスに置き換わっていますので、対応させるには

GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(35.658625, 139.745415);
marker.title = @"東京タワー";
marker.snippet = @"東京都港区芝公園4-2-8";
marker.map = self.mapView;

このように書きます。


“Could not find a storyboard named ‘Main’ in bundle NSBundle” のエラーを吐いてしまい実機で動かない

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

デバッグ中に突然タイトル通りのエラーを吐き、実機で動かなくなりました(iOSシミュレータだとタイトルのエラーは吐かないけど正しく動かない状態)。Main.storyboardは存在しています。プロジェクトのターゲットにも入っています。どうやら参照がおかしくなってしまったようです。

Main.storyboardへの参照を再設定しましょう。左ペインのプロジェクトナビゲータからMain.storyboardを選択してDelete(参照の削除なのでRemove Reference)し、プロジェクトに再度Main.storyboardを追加します。が、このままでは動きません。

Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?

このエラーを吐いて起動できません。アプリ起動のエントリポイントになる画面が設定されていないからです。

 

右ペインの起動画面のAttributes inspectorにてIs Initial View Controllerにチェックを入れましょう。


GoogleMaps SDK for iOSのAPI Keyを取得する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

また少し手順が変わっていましたので、最新の情報を書き残しておきます。

まず、Google APIs Consoleにアクセスします(Googleアカウントにログインしていなければログイン必須)。

 

次に、左ペインのAPIS & AUTHカテゴリのAPIsを選択し、API一覧の中にあるGoogle Maps SDK for iOSのSTATUSをONにします。

 

次に、同じく左ペインのAPIS & AUTHカテゴリのCredentialsを選択し、Public API accessのCreate new Keyを押下します。

 

Keyの種類を選択画面が表示されますが、ここではiOS keyを選択します。

 

次に、SDKを組み込むアプリのBundle Identifiersを入力します。Bundle IdentifiersはXcodeのTARGETS->General->IdentityのBundle Identifiersと同じものです。

 

Createボタンを押下すると、Keyが生成されます。

 

余談ですが、Google Developers Consoleはローカライズできますので、どうしても日本語での説明が欲しいという方は下記ページにて日本語に変更しましょう(エンジニアはEnglish設定の人も多いと思いますので、ここでの説明はEnglishのままで行いました)。
https://console.developers.google.com/accountsettings


iOSアプリ申請代行&申請サポート

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

株式会社プライムセオリーではiOSアプリの申請代行やiOSアプリ開発コンサルティングをアプリ開発とは独立させたメニューとして提供しております。

iOSアプリ申請代行&iOSアプリ開発コンサルティング
http://submitapp.info/

正直なところこのメニューだけを引き請けてもほとんど利益にはならなのですが、困っている方が多くいらっしゃるようなので専用メニューとして提供しております。おかげさまで数多くご用命いただいておりまして、アプリ申請代行やアプリ開発コンサルティングなどアプリ開発の周辺サポートに関してはアプリ開発会社の中でも抜きん出ていると自負しております。。ただ、「代行やサポートを依頼するまでもないけど、Webの情報だといまいち信用できない、古すぎる」というようなこともあるようでして、自力で申請を行いたい方のためにgumroadにて申請マニュアルを販売しております。

2016/03/22現在、情報が古くなっているためgumroadでの販売は中止しております。「自力で行いたいけど、サポートが必要」という方は申請代行ではなく申請サポートをご用命ください。もちろん、通常の申請代行も喜んで承ります。詳細はこちらに記載がございます。


“The Simulator can’t be launched because it is already in use.”

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。


SimulatorをターゲットにRunさせようとした時、(まだ)iOS Simulatorを起動していなのに怒られるエラーです。iOS Simulatorでデバッグしている最中に突然発生するようで、過去に何度か遭遇しています。

おそらく、クラッシュ時にプロセスが解放されずに残っている状態なんだと思いますが、シミュレータの強制終了、Xcodeの再起動で解決できます。