Archive for the 雑談 Category

iOS 7 雑感

iOS7がリリースされました。

大幅にUIが変更されましたね。
さっそくXcode 5 Developer Previewをダウンロードして試しています。
Xcodeの完成度としてはまだまだな気がしますが、とりあえずシミュレータを起動して、基本的な動きや外観を見てみました。

事前に噂されていたようにUIは大幅にフラットなイメージに統一されています。エミュレータでは限定したアプリ(Safariや写真、設定など)しかありませんし、バックグラウンドのイメージも無い為、最初の印象は少々貧弱に感じてしまいました。しかしWWDCのKeynoteなどを見ているとけっこう上品な感じに仕上がっているように感じます。

さて、Xcodeを使いながら色々試しています。
ハッキリ言って「困った…」と感じています。

UIButtonやUIToolbarなど、標準のコントロールもフラットでシンプルなものになってしまいましたが、それに伴いサイズも変わってしまいました。
既にリリース済みのアプリをシミュレータで動かした所、レイアウトの変更を強く感じます。
また標準のUIがフラットになったため、今まで使っていたPNGなどによる立体的なボタンの画像などもiOS7用に作り直す必要があるかもしれません。
もちろんiOS6以前も対応とする場合には、同じiPhoneでも2種類のUIを用意しなければならないかもしれません。
iOS6ではNSLayoutConstraintなどがあるため比較的対応がし易いかもしれませんが、それ以前もとなると…

もう一つ気になったのが、iOS7では「レイアを積み重ねる」というコンセプトらしく、どうもステータスバーもそのレイアの一つになっているようです。今まではステータスバーを表示させるとその高さ分はアプリケーションの関知出来ないエリアでした。
ですがiOS7ではどうもその領域にもアプリケーションが描画する事ができて、その上にステータスバーが半透明でレイアを重ねるという形になるような気がします。
するとステータスバーを表示しているアプリは全てそれに沿ったレイアウトに変更しなければならなくなるかも知れません。たかだか20ポイント分なのですが、上部にギリギリまで何かを描画しているような場合には気を付けなければならないかもしれません。

朗報は、xcodeにおいてstoryboardを使ってレイアウトする場合に、下記画面の右側でUIをiOS7用かiOS6.1以前用かを切り替える事が出来るようになっているようです。

 

 

iOS Developer Programの更新

そろそろ時期がやってきたようで、iOS Developer Programの更新の案内が来ました。

少し前から気になっていたのが昨今の円安で、円建ての年会費が上がってしまうのでは?と言う事です。
しかし今現在では8400円(消費税込み)。去年より100円安くなっています。
今の契約が切れるのは4月ですのでまだ時間がありますが、円安が反映されないうちに更新しちゃいます。

 

Build OpenCV for armv7s

現在のOpenCVは正式な環境では armv7s 対応のライブラリを作ってくれません。
そのため、アプリをビルドする場合にはプロジェクトから armv7s を外さなければなりません。
これからアプリを出そうという際には最新のアーキティクチャを使えないのはとうも納得が行きません。
そこでいろいろ調べてみました。
私はcmakeに関しては全くの素人で、これから知識を深めたいというわけでもありませんので、「とりあえずビルドできる」を目標にしています。

結論から言うと
opencv/ios/cmake/Toolchains/Toolchain-iPhoneOS_Xcode.cmake を編集してやります。

essage (STATUS “Setting up iPhoneOS toolchain”)
set (IPHONEOS TRUE)

# Standard settings
set (CMAKE_SYSTEM_NAME iOS)
# Include extra modules for the iOS platform files
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} “${CMAKE_CURRENT_SOURCE_DIR}/ios/cmake/Modules”)

# Force the compilers to gcc for iOS
include (CMakeForceCompiler)
CMAKE_FORCE_C_COMPILER (gcc gcc)
CMAKE_FORCE_CXX_COMPILER (g++ g++)

set (CMAKE_C_SIZEOF_DATA_PTR 4)
set (CMAKE_C_HAS_ISYSROOT 1)
set (CMAKE_C_COMPILER_ABI ELF)
set (CMAKE_CXX_SIZEOF_DATA_PTR 4)
set (CMAKE_CXX_HAS_ISYSROOT 1)
set (CMAKE_CXX_COMPILER_ABI ELF)

SET (CMAKE_OSX_ARCHITECTURES “armv7” “armv7s”)

# Skip the platform compiler checks for cross compiling
set (CMAKE_CXX_COMPILER_WORKS TRUE)
set (CMAKE_C_COMPILER_WORKS TRUE)

赤で色分けされた行を追加してやるだけです。
とりあえずテストプロジェクトでは iPhone 5用にビルドしても問題なく armv7s でコンパイルされており、リンカーでもエラーは出ません。

 

ただもう一つ問題が…

結論から言うと、armv7でもarmv7sでもパフォーマンスはあまり変わりませんでした(処理にも依存すると思うのですが)。

で、OpenCVをビルドした時のログを見てみると全くオプティマイズされていないようなのです。

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xct oolchain/usr/bin/clang -x c -arch armv7s -fmessage-length=0 -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototy pes -Wno-return-type -Wformat -Wno-missing-braces -Wparentheses -Wswitch – Wno-unused-function

 

これは多分armv7でビルドした際も同じだと思います。OpenCVのソース内までデバッガーで追って行くつもりは無いのでやはり “-Os” でコンパイルしたいです。
またOpenCVのcmakeと格闘です。
今回の事で少しだけcmakeも理解(?)出来た気もしますので時間のある時に試してみます。

Using OpenCV on iOS 6.0

OpenCVをビルドして、iOSで使用するまでのステップをまとめます。
環境は以下の通りです。

  • xcode 4.5.1 (iOS 6対応)
  • OpenCV 2.4.2
  • iPhone 5

1. OpenCVをダウンロードする
まずはOpenCVをダウンロードします。
これを書いている時点での最新バージョンは 2.4.2です。
OpenCV-2.4.2.tar.bz2
ファイルを解凍し、適当なディレクトリーにコピーして下さい。

2. OpenCVをビルドする
OpenCVのディレクトリ名を”opencv”に変更し、pythonのスクリプトを実行します。

$ mv OpenCV-2.4.2 opencv
$ python opencv/ios/build_framework.py ios

時間は少々かかりますが、先ほどのopencvディレクトリと同じ階層に”ios”というディレクトリが作成され、必要なものはそこにまとめられます。

3. xcodeでプロジェクトを作成
プロジェクトのタイプは何でも良いと思います。
作成したプロジェクトの $(PROJECT_NAME)-Prefix.pch を開き下記の部分を追加して下さい。

#import

#ifndef __IPHONE_3_0
#warning “This project uses features only available in iOS SDK 3.0 and later.”
#endif

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif

#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#endif

4. opencv.frameworkの追加
先ほどビルドしたiosディレクトリをプロジェクトのディレクトリにコピーし、
opencv.framework (ios/opencv.framework )ディレクトリをプロジェクトに追加します。ドラッグ&ドロップでOKです。

4. テストプログラムのビルド
とりあえずメインのViewControllerだけ新規作成します。Super Classは何でも構いません。一番簡単なUIViewControllerのサブクラスをひな形だけ作ります。
ファイルを作成したら、拡張子を”.mm”に変更します。こうする事でxcode標準(?)のObjective-CとC++を混在させる事が出来ます。
ちなみにiOS版のOpenCVはC++とで出来ています。

ロジックは何も書いていませんが、この状態でビルドが出来る事になります。
試しにビルドしてみると #include <ext/atomicity.h>  が見つからないとエラーが出ると思います。

不思議な事にエミュレータでビルドすると大丈夫なのですが、実機でビルドをするとエラーが出てきます。
正直な所、ここでかなりハマりました。
ext/atomicity.h なるヘッダファイルはxcodeのディレクトリの下に実際に存在します。またこのエラーはプリコンパイルヘッダを clung がC++用にコンパイルする時に出て来ます。

たどり着いたのはコンパイラの設定です。

問題があるのは “C++ Language Dialect” と “C++ Standard Library” のようです。

下記の様に設定し直します。

この状態でコンパイルは出来る様になったはずです。
しかしリンクに失敗する場合があります。「場合があると」というのは実機にiPhone 5を使用したときです。iPhone 5は新しい armv7s を搭載しています。xcode 4.5も armv7s 用のコードを出力します。しかし OpenCV がまだ armv7s に対応していないようで、Python のスクリプトでビルドしたライブラリには armv7s 用のコードが含まれていないようです。そのため実機用のコードも armv7 用のコードで統一しなければいけないようです。

これも設定で回避できます。

 

“Valid Architectures” からarmv7s を削除し、Build Archive Architecture Only を “NO” にします。

以上です。

iOS 5.xのデバイスはいつまで続くか?

現時点ではまだ始まっていないようですが、本日中にiOSのアップデートが始まります。iOS5.xがインストールされている対応デバイスならば自動的に(?)OTAでアップデートが知らされるはず。だとすると多くの人(iPhone3G, iPhone4, iPhone4S, iPad2 , iPad(3rd gen), iPod Touch 4)はあまり遠くない時期にはiOS6に移行してくれそうだ。

iOS5.xのままで残っているのは iPhone 3G, iPad (1st gen), iPod touch (3rd gen)という事になる。もっと古い機種はiOS4.xのままという事になる。かなり古い機種で、現役で使っている人はどれくらいいるのだろうか?

 

そんな事じゃないかと…

前々からiPhoneやiPadのiOSでバイスではデジカメで撮った写真をiTunesを通じて同期していました。

今まで買って来たデバイスは全て32GBのモデルで、さして容量を圧迫している感じも無かったのですが…

 

今年のGW頃に妻に買った「新しいiPad(iPad 3)」はちょっと事情が違いました。

開発でも使っている自分用のデバイスはiTunesで同期したりする度に残容量は自然とチェックしていたのですが、妻のデバイスはそれほど見ていませんでした。

先日、「妻のデバイスにも写真をUpdateしてあげよう」としたらビックリ!

iPad3 (32GBモデル)

空き容量が1.53GBしかありません。

一方私の使ってるiPad2は、妻よりもアプリがいっぱい入っているにも関わらず6.6GB残っています。

iPad2 (32GBモデル)

 

同じソースの写真を同期しているにも関わらず、妻のiPad3は4倍の容量を使っているのです。

なるのど。Ratinaディスプレーです。

iTunesは同期のタイミングで写真の元データをそのままデバイスに転送するのでは無く、デバイスに最適化したサイズに変更しているんですね。

ですからiPad2に対して縦横2倍の解像度になったiPad3ではピクセル数が4倍になったために転送される画像のサイズが大きくなってしまったんですね。

 

しかし…、このままでは32GBの容量を使い果たすのも時間の問題。

困った。

秋にはiOSの新しいデバイスが出る事も噂されていますが、写真データを同期して使っている場合にはメモリーサイズを気にした方が良いかもしれませんね。

まぁ、今のiPadの画面サイズを上回るデバイスが出てくるような感じはありませんから暫くは気にしなくても良いとは思うのですが。

 

 

「ほかのアカウントで使用可能なアップデートがあります」

WWDCでiOS6の新機能やXcode 4.5 Developer Previewもリリースされましたね。

まだiOS6の詳細は見ていませんがワクワクしてきます。

それと同時に今までリリースしたアプリの互換性テストなども気になります。

iOS6のリリースが秋頃という事ですから、iPhone5のリリースもその頃なんでしょうね。

 

さてiOS6用の準備の前に、同時にリリースされたXcode 4.3.3ですが、さっそくAppStoreでアップデートしようとしたところ、上手く行きません。

「ほかのアカウントで使用可能なアップデートがあります」なるメッセージが出て止まってしまいます。メッセージの内容も意味不明。googleで検索してもコレと言った答えが見つかりません。

ではっ!って事でインストール済みのXcodeをゴミ箱に捨てて再びAppStoreでインストール。

無事にインストールする事が出来ました(現在インストール中)。

 

7月にはMountain Lionもリリースされるとか。

楽しみです。

 

 

3G回線からパケットを逃がしたい携帯キャリア

ドコモが昨年末にトラブルを起こした事で顕在化した3G回線を始めとする携帯の回線の飽和状態はどこのキャリアでも否めない問題だと思います。

私が携帯(iPhone)で使っているauの回線もやはり同じです。携帯電話各社はそれぞれにWi-Fiスポットを設けて極力通話以外のパケット通信を他へ逃がしたいようです。

あまりTVを真面目に見ていない私は「巨人の星」の星飛雄馬を起用したCMも「へ〜」という程度で流してみていました。ふと気付くと我が家のインターネット接続や固定電話で使用しているJCOMとの併用で毎月基本料金が1480円も割引になると!

勇んで近くのau shopに申し込みに行って来ました。月額基本料金が割安になるだけではなく、自宅固定電話とau携帯の通話が無料になってしまうという事を聞き、またお得感。

iPhone 4Sのリリースとともにナンバーポータビリティーでキャリアも変えた時には、au光の回線ならば通話料が無料になると聞いていたのですが、いつのまにか(?)JCOMもauの傘下に入っていたのか、同様に無料になっていました。

2月頃でしょうかauから案内書が来て、今なら無線LANルータがタダでレンタル出来ると…

auのHPでも紹介している「HOT SPOT Cube 無料レンタルキャンペーン」です。

その時はあまり興味を引きませんでした。既に家では無線LANルータは導入していましたから。

しかし前述のJCOMと併用時の割引キャンペーンのためにau shopを訪れた際に紹介された「auスマートバリュー(ルータ割引)」のキャンペーンです。au傘下のUQ Wi-Maxが提供するWi-Fi Walker Data08Wが利用の無い月は基本料金0円で使えるというサービス。元々外出の機会が少ない私ですが、「いざ!」という時には使いたいと思うときもあります。おまけにパケットの制限も無く最大で4410円です。

良い話だけではありません。もちろんauの主回線やJCOMの回線を含めた2年縛りはあります。その部分ではちょっと考えてしまいました。

しかしこのData08Wの別売ドックを買うと、通常時は802.11nまで使える家庭用Wi-Fiルータとしても使える事が分かりました。もちろん家庭内で使っている場合には家に引き込んでいるLAN回線(私の場合にはJCOMのInternet回線)を使用するのでWiMaxの接続料金はかかりません。

 

別にauの宣伝をしている訳ではありません。

しかし携帯各社、程度の差はあれどこも回線は逼迫しているようです。

出来れば3G回線(一部ではLTEや4G)から別の回線(Wi-Fi等)にパケットを逃がしたい事情があるようです。

 

auと幾つかの固定電話の回線と併用した場合の月額基本料金割引の話は出ているのですが、残念な事にUQ Wi-Maxの端末が割引になっているという話は全面には出て来ていません(auのHPでも何故か奥まった所にしかありません)。
そろそろiPhone 5の噂も出ている昨今。あまりキャリアに縛られたくない私ですが、なんとなく割安感で申し込んでしまいました。

ちなみに 「HOT SPOT Cube 無料レンタルキャンペーン」も申し込んでしまいました。

おかげで我が家の無線LAN環境はちょっと変な形になっていますが… (^^;

 

au版 iPhone4S、MMS対応を使ってみる

 

auのiPhoneがようやMMSに対応したようですので、さっそく使ってみました。

iMessageはiOS5の中でも注目していた機能でした。これでやっと全機能が揃った感じがあり、嬉しい限りです。4月中旬とアナウンスされていましたので、そろそろかな?とは思っていましたが、週末にリリースされるとは思ってもいませんでした。

 

まずはキャリア設定のアップデート。「もしかしてiOSをフルダウンロードするの?」と思いましたが設定ファイルをダウンロードするだけでほぼ一瞬で終わってしまいました。あまりにも早かったので、本当にアップデート出来ているのか疑ってしまうほどでした。

 

次に恒例の#5000へのSMSを送ってやると、返信にメール設定用のURLが送られてくるというヤツです。

図1

この中で「MMS(メッセージアプリ)でEZwebメールを利用」をクリックしてやるとサーバ側の設定は完了です。あとは「設定」アプリでiPhone側での設定をするだけ。

ここでも行うのはMMSに使用するメールアドレスを設定するだけです。

図2

これでezweb.ne.jpのアドレスにメールが来ると自動的にMMSが「メッセージ」に届きます。

至って簡単。しかしコレだけでは今まで受/送信していた「メール」アプリでのezweb.ne.jpメール受信が出来なくなってしまうようです。当然ですが。

「メッセージ」アプリは手軽で簡単にMMSの交換が出来る一方、ある程度レイアウトされたメールや、添付ファイルのあるメールには不向き(あくまで手軽なメッセージングを目指しているようなので至極当然)なようで、私としては「メール」アプリも共存して使いたいと思っています。

そこでまた図2のメール設定の画面に戻り、「その他設定」で「メールアカウント手動設定」を行います。今までは「メール」アプリでのリアルタイム受信をしていましたが、リアルタイムの方は「メッセージ」アプリに任せ、必要に応じて「メール」アプリでメールを読んだり返信したり…というスタイルが出来るようになります。

週末のリリースでしたので、あまり受信するメールも多くないのですが、「メール」と「メッセージ」の両方に大量のメールが来だしたりすると、また設定を変えたくなるのかもしれません.

新規にメッセージを作成する時、「メッセージ」アプリは宛先のアドレスをiMessageのサーバに登録されているか問い合わせに行くようですね。もし登録されていればiMessageとして、登録されていなければMMSとして送信するようです。あまりにもシームレスに使えるので「え?いま何に対して打ってるの?」と戸惑ってしまう程です。