iphone6が世に出回ってしまいましたね。これで用意しなければならない画像サイズが増え、悩みの種も増えてしまいました。私も仕方なくxcodeを6.0.1にアップデートしました。そして、以前作成したプロジェクトを実機で実行してみようとビルド&ランすると分かっていましたが赤い文字がかなり出ました。


40個もエラーが出ると萎えます。
しかしながら、エラー内容を見ると同じようなものなので少し安心です。
ググルとやはり同じような状態の人がいたので助かりました。
日本の方ですと、この方を参考にさせて頂きました,ありがとうございます。

私は何度もクリーンする癖があるのでcocos2dのライブラリ郡をスタティックライブラリ化しているため、メインのプロジェクトにlibpng_arm64.a等を追加しました。




最終的にこんな感じになってます。
これでビルドヽ( ^ω^)ノサクセス!





検索用にエラー文残しておきます
"_WebPGetFeaturesInternal", referenced from:
"_jpeg_start_decompress", referenced from:
"_png_read_image", referenced from:
ld: library not found for -lcurl_arm64

 現在作成中のアプリではSQLiteを使っているのですが,このアプリではdbの中身を書き換えられるとバランスが崩れてしまうのです.そこで,SQLiteを暗号化してしまって簡単に中身を書き換えられないようにしてみようと思います.

 今回使うのはSQLCipherという暗号化ライブラリです.SQLCipherは自分でビルドして,ライセンスを明記すれば商用でも利用できるとのこと.個人開発ということでできるだけお金をかけたくないので嬉しいライブラリです.

開発環境


OS X 10.9.3 Marvericks
Cocos2d-x v3.0

 基本的には公式の方法に従います


1.OpenSSLをDL


terminal
$ curl -o openssl-1.0.0e.tar.gz http://www.openssl.org/source/openssl-1.0.0e.tar.gz
$ tar xzf openssl-1.0.0e.tar.gz


2.SQLCipherをDL


terminal
$ git clone https://github.com/sqlcipher/sqlcipher.git


3.OpenSSL-XcodeをDL


terminal
$ git clone https://github.com/sqlcipher/openssl-xcode.git


 ここまで実行すると写真のようになっていると思います.



4.パスを追加する

1.Xcodeを起動して,上部のバーから「Preferences...」を選択します.
2.「Locations」タブを選択します.
3.写真のようにName,Display Nameを入力し,PathにOpenSSLを指定します.
例:/Users/(ユーザ名)/Developer/cipherTest/openssl-1.0.0e


5.プロジェクトを作成&追加する

 既に作成しているプロジェクトにSQLCipherを導入したい場合は新規にプロジェクトを作成する必要はありません.それでは,既存プロジェクトに先ほどDLしたプロジェクトを追加していきます.


 追加する時は下記のようにして下さい.



 追加するプロジェクトは2つです.






 追加後の状態です.





6.Build Phases

 xcodeの「Build Phases」に「Target Dependencies」があるので,ここから「sqlcipher」と「crypto」を追加します



 同じく
「Build Phases」の下部に「Link Binary With Libraries」があるので,ここから「libcrypto.a」と「libsqlcipher.a」を追加します.




7.-DSQLITE_HAS_CODECを追加する

 xcodeの「Build Settings」で「other c flag」と検索すると必要な項目が出てきます.
「Debug」と「Release」に「-DSQLITE_HAS_CODEC」を追加します.



8.ビルドしてみる

 うまくビルドできれば下記のようになります.もし,赤文字から黒文字に変わってない場合はビルドができていません.
そういう時は,プロジェクトごとにビルドしていくとうまくいくと思います.また,openssl.xcodeprojに関してはデフォルトのBaseSDKがiOSになっていませんでしたので変更しました.

 libcrypto.aはMy Mac 64-bitに変更してビルドすると赤文字→黒文字になります(これはしなくても動作しましたが,赤が気になる時は,という程度です





9.エラーが出る


Code
const char* key = [@"BIGSecret" UTF8String];
sqlite3_key(db, key, strlen(key));

 せっかくここまで準備してきたのに,上のようなCocos2d-xでsqliteを操作するコードを書くとエラーが出て,絶望に浸っていました.どうやら,sqlcipher.xcodeprojにはSecurity.frameworkが入っているのですが,私の場合ですとCipher-Cocos2dxプロジェクトに
Security.frameworkが入っていなかったことが原因だったようです.これを「Linked Frameworks and Librayies」から追加するとエラーが無事消えてうまく利用できるようになりました.


10.速度

 SQLCipherを利用すると,利用していない時と比べてデータへのアクセス速度がかなり落ちます.ですので頻繁にdbへアクセスするようなコードを書くと,アプリが非常につかいずらくなってしまうので気をつけた方が良さそうです.



11.その他エラー


Error Code
Shell Script invocation error

cp: libssl.a: No such file or directory

line 66: ./config: No such file or directory

 このようなエラーが出た場合は4番目のOPEN_SSLのパスの追加部分で,パスが間違っている可能性があります.空白が入っていたり,パスのコピーをミスして改行が入っていたりと気づかなかったりします.改行が入っていた場合は,本当に気づきにくいです.






MacBook Proに買い換えて、しばらくMAMP(バージョン 3.0.5)を使ってローカル開発をしていましたが、今回はmacデフォルトのapacheを使ってローカル開発することにしました。 

terminal
$ brew tap homebrew/dupes
$ brew search httpd

brewで導入したかったのですが、上記コマンドを実行してもhttpdが見つからなかったという理由ですが。


ローカル開発環境


OS X 10.9.3 Marvericks
PHP 5.4.30
Apache/2.2.26 (Unix)
mysql  Ver 14.14 Distrib 5.6.19
CakePHP 2.5.2


Apacheの起動


terminal
$ sudo apachectl start

私は毎回打つのが面倒なので.bashrcにaliasとして登録しています。

.bashrc
alias apachestart="sudo apachectl start"

これでterminalでapachestartで起動できるようになりました。

terminal
$ apachestart

デフォルトのままですと、アクセスされるディレクトリは下記のようになっていると思います。

デフォルトアクセスディレクトリ
/Library/WebServer/Documents/

CakePHPのダウンロード


terminal
git clone git://github.com/cakephp/cakephp.git

これで、CakePHP本体をダウンロードできました。
ここで、apacheが起動できている状態でCakePHPフォルダにアクセスすると最初のページが表示されるはずなんですが、写真の様になってしまいました。

これは、調べたところ.htaccessのオーバーライドが許可されていないことが原因のようでした。いつもはWebサーバを使っていたので、こんなエラーは発生しなかったのですが、どうもmacのapacheのhttpd.confを見ると許可してくれる設定になっていませんでした。
(参考:
http://book.cakephp.org/2.0/ja/installation/url-rewriting.html)

/etc/apache2/httpd.conf
<Directory />
    Options FollowSymLinks
    #ここを変更する
    #AllowOverride None
    AllowOverride all
    Order deny,allow
    Deny from all
</Directory>

apacheを再起動後、もう一度アクセスしてみます。

アクセス成功!

その他、CakePHPの設定については省略します。。。

mecab導入


基本的には青春B■雑記blog‐青酸カリ カラメルシロップ味‐さんと同じです。
(brewコマンドを使えばmecab導入が楽です。)

terminal
$ brew install mecab
$ brew install mecab-ipadic

terminal
#brewでインストールした場合は必要ないです
$ wget https://mecab.googlecode.com/files/mecab-0.996.tar.gz
$ cd mecab-0.996
$ ./configure --enable-utf8-only
$ make
$ make install

#brewでインストールした場合は必要ないです
$ wget http://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/mecab-ipadic-2.7.0-20070801.tar.gz
$ tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure --with-mecab-config=/usr/local/bin/mecab-config --prefix=/usr/local/ --with-charset=utf8
$ make
$ make install

$ wget https://github.com/downloads/rsky/php-mecab/php-mecab-0.5.0.tgz
$ tar xzvf php-mecab-0.5.0.tgz
$ cd php-mecab-0.5.0
$ phpize
$ ./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
$ make
$ make install

途中でphpizeを使う必要があるのですがautoconfが入ってないと怒られます。そこでbrewでインストールしてしまいます。

terminal
$ brew install autoconf

これで、phpizeで怒られずconfigureが作成されます。
次に、phpからmecabを実行するために、php.iniにmecab.soを読み込ませます。
私の場合、mecab.soが
/usr/lib/php/extensions/no-debug-non-zts-20100525にあるようなので下記のように書き込みました。

/etc/php.ini
[Mecab]
extension_dir=/usr/lib/php/extensions/no-debug-non-zts-20100525
extension=mecab.so

CakePHPでmecabを実行


***Conroller.php
public function index()
{
        $res = mecab_split("今日の天気は晴れです。");
        $this->Set("res", $res);
}


index.ctp
<?php pr($res) ?>

みたいな感じでアクセスすると

成功!!