第5回ハッカソン:審査なしにiOSアプリぽいものを配布してみる
年も無事あけました。今年もよろしくお願い致します。
去年の11月のことになってしまったのですが
前々回から運営をまかされましたソネットグループ合同ハッカソンに参加したので、
なにやったかを一応書いとこうかとおもいます。
ちなみに、普通のハッカソンは何かしらのテーマを決めるんですが、
ソネットハッカソンはテーマ超フリーです。
iOS・Androidアプリ、Node、Rails、Unity、EnchantJS、Arduino、Raspberry Piなどなど、なんでもアリです。
さて、前回は「審査なしにiOSアプリぽいものを配布する」ということをテーマに取り組んでみました。
仰々しく、いかにもハックな感じですが別にたいしたことはしてないです。
「iOSアプリっぽい」ものでiOSアプリじゃないです。
キーアイディア
誰でも簡単にできるようにする
上記のことを一つ一つ組み込んでいけばそれっぽいことが可能なのですが、いかんせんめんどくさいです。
実際にはサイトを設置するサーバーが必要ですし、
特にWebアプリケーションキャッシュのマニフェストを定義したりするのが煩雑です。
ということで、それを簡単に統合的にやってしまえるようなプラットフォームをつくろうと思い立ちました。
その名も
Gomafu
ゴマフです。名前はぱっとおもい浮かんだだけです。深い意味はないです。
実態はRailsプロジェクトです。githubにあげました。
https://github.com/mikito/gomafu
こいつはただのRailsプロジェクトなので、どこかのサーバーに設置する必要がありますが、
設置後は複数のアプリが登録可能です。
どうつかうんですか
デモサイトも設置しました。(一定時間でリセットされます)
http://gomafu.herokuapp.com
- HTML、Javascript、CSSなどで静的コンテンツをローカルでつくる
- 作ったコンテンツをzipで圧縮
- 管理画面でzipを送信
- アプリのアイコンやタイトルを設定
以上の手順をふむだけで、
ダウンロードページやWebアップモードの設定、アイコンの設定、キャッシュマニフェストの生成などを自動でおこないます。
アプリをダウンロードするURL(実際にはWebクリップするページ)も
http://gomafu.herokuapp.com/azarashi.app
のようなそれっぽい感じになります。
また、管理用のJavascriptが自動でうめこまれ、
保存手順の表示や最新版の更新処理などをなにも考えずにやってくれます。
所感
HTMLをつかったハイブリッドアプリケーションを生成するツールやサービスにはPhoneGapやMonacaがありますが、
このGomafuはiOSの開発者登録してなくてもそれっぽいことができるのが利点でしょうか。
用途としては本当に簡単なもの、写真ギャラリーアプリ、何かの紹介アプリ、EnchantJS等で作ったゲームなどがあるかとおもいます。
開発者ライセンスとるほどでもないけど、すこしアプリっぽく配布したい!ってときには使えなくもなさそうです。
ただ、なんかもうキャッシュのまわりの挙動がよくわかんなくて
ちゃんと使えるようにするにはまだまだ調整が必要そうです。
可能性はあるような気はするんですが...
長文になってしまいました。
とりあえず、今年も頑張っていこうとおもいます。
Unity AdMob Pluginアップデート
もう8月....!ぐぬぬ
以前作ったUnityのAdMobプラグインを更新しました。
https://github.com/mikito/unity-admob-plugin
- 主な変更点
- iOSでLandscapeに対応
- AutoRotationに対応
- 右上、左上、右下、左下の広告表示位置を指定可能に
- AdMob SDKを6.5.0にアップデート
Xcode上でのフレームワークとLinker Flagの追加を自動化したいけど
どうしてもxcodeproj gemがうまく動かん..
まえの環境ではうまく動いたんだけど、何がいけないのか。
Jenkinsなどで自動ビルドしてる場合は必須だから、どうにかしたいんだけどなぁ
どなたかXcodeプロジェクトをコマンドないしスクリプトでいじる良い方法をしってたら教えてほしいです。。
あと本当は、Androidでもう少し広告のサイズの最適化をしたい。
けど、タブレットしか持ってないし、なかなかやる気がおきない。
そのうちかなー
そういえばここ数ヶ月で
Unityフリーライセンスにて、モバイルアドオンが無償化になったり、
アセットをForce Textでシリアライズできるようになったり、
なかなかいいことがあってうしくなりました。
この勢いでスプラッシュも何かしら緩和されればなーと思う次第です。
UnityのAdMobプラグイン、Flurryプラグインを作ってみました
Unityで使えるモバイル向けのプラグインを作ってみました。
■ Unity AdMob Plugin
https://github.com/mikito/unity-admob-plugin
■ Unity Flurry Plugin
https://github.com/mikito/unity-flurry-plugin
両方ともパッケージを読み込み後、
プレファブ一個を追加してAPI Keyを設定するだけで使えるので導入も簡単だとおもいます。
iOS、Androidの切り替えも自動です。
AdMob、Flurryに関してはprime31のプラグインが既にありますけどね...
自分のサポートにあまり自信がないので、
企業などのちゃんとしたプロダクトに関しては上記の有償のプラグインを使ったほうが良いんじゃないかと思います。
トラブルが起きた際の損失は保証できませんのであしからず
最近はサーバーサイドをもっぱら触ってるのでUnity関連が全然トラックできてない...
先日Unite Japanにいってきましたが、最新の動向やらマニアックなTipsが知れていい刺激になりました。
Tic Tac Toe Countdownをアップデートしました
2010年にiOSネイティブで作ったゲームをアップデートしました。
https://itunes.apple.com/jp/app/tic-tac-toe-count-down/id348792842?mt=8
引き分けがない特殊ルールのまるばつゲームです。
前まで大学のサーバーに勝手にサイト置いてましたがそれも移しました。
http://mikinya.net/apps/tictactoe
更新内容は以下です
- マルチタスクに対応して、アプリを中断しても途中からできるように(いまさら!)
- iPhone5の解像度に対応(むしろRetina Displayにも対応してませんでた)
- ゲーム中の画像リソースのクオリティをぐんとアップ!
いやぁリリースしたのはiPhone3GSとかそんな時代だったからなぁ
ソースコードがあるのかも怪しかった...学生のリソース管理怖い
アップデートにご協力頂いた皆様、大変ありがとうございました。
おいしいケーキでもごちそうします。
以下駄文
さてさて、今回(以前?)はObjective-Cで書いた完全にネイティブなアプリですが、
そのうちマルチプラットフォームのアプリも出したいですねー
今、Cocos2d-xに奮闘中ですが、環境構築や作業フローなどにやや煩雑さを感じます。
慣れればどうってことないでしょうが。
仕事でUnityを触ってると、開発効率に惹かれますが、ライセンス料金が個人で賄うにはきつい...
フリーではスプラッシュかえられないし、3Dのモデラーがいないと、宝の持ち腐れ感もありますし。
新しいゲームエンジンもいろいろと出てて、キャッチアップしていかないとなーと
作りたいものはたくさんあるんですけど、一番の問題は開発時間をどうとるかですね。
がんばっていこうかと思います。
Gitlabを5.0にアップデート
Gitlabが5.0リリースされました。
アップデートはまぁ近いうちとおもってましたが、
このタイミングでとは...
しかし、公式サイトみてみたらちゃんと3/22にリリースしますって書いてあった...
今回はちゃんと調べて選択しろってことを大変よく学びました。
なにはともあれアップデートしました。
5.0からはgitoliteがいらなくなり、構成、インストール手順も大きく変わってます。
公式の手順はこちら。
https://github.com/gitlabhq/gitlabhq/wiki/From-4.2-to-5.0
以下は作業のログです。
bundlerのおかげでrvm使うメリットはあまりないかもしれませんが、
バージョン違いのアプリケーション共存とかも考えて一応使う方向でいきます。
うーんrbenvをつかったほうがいいんですかね?
Gitlab停止
[mikito@nya ~]$ sudo service gitlab stop
gitユーザのシェル変更
[mikito@nya ~]$ sudo chsh -s /bin/bash git
リポジトリの所有者変更
[mikito@nya ~]$ sudo chown git:git -R /home/git/repositories/
gitlab-shellインストール
[mikito@nya ~]$ sudo su - git
[git@nya ~]$ git clone https://github.com/gitlabhq/gitlab-shell.git /home/git/gitlab-shell
[git@nya gitlab-shell]$ cp config.yml.example config.yml
[git@nya gitlab-shell]$ vim config.yml # gitlab_url編集
[git@nya gitlab-shell]$ ./support/rewrite-hooks.sh
gitlabコピー
[mikito@nya ~]$ sudo cp -R /home/gitlab/gitlab /home/git/gitlab
[mikito@nya ~]$ sudo chown git:git -R /home/git/gitlab
[mikito@nya ~]$ sudo rm -rf /home/gitlab/gitlab-satellites
RVM再度入れる
[mikito@nya ~]$ sudo su - git
[git@nya ~]$ curl -L https://get.rvm.io | bash -s stable --ruby
[git@nya ~]$ rvm install 1.9.3
[git@nya ~]$ rvm use 1.9.3
[git@nya ~]$ gem install bundler --no-rdoc --no-ri
[git@nya ~]$ gem install charlock_holmes --version '0.6.9' --no-rdoc --no-ri
[git@nya ~]$ rvm gemset create gitlab
[git@nya ~]$ rvm use 1.9.3@gitlab --default
gitlab update
[git@nya ~]$ cd gitlab
[git@nya gitlab]$ cp config/gitlab.yml config/gitlab.yml.old
[git@nya gitlab]$ git fetch
[git@nya gitlab]$ git checkout 5-0-stable
[git@nya gitlab]$ cp config/gitlab.yml.example config/gitlab.yml # 再度設定
[git@nya gitlab]$ bundle install --without development test postgres --deployment
[git@nya gitlab]$ bundle exec rake db:migrate RAILS_ENV=production
[git@nya gitlab]$ bundle exec rake gitlab:shell:setup RAILS_ENV=production
[git@nya gitlab]$ bundle exec rake gitlab:shell:build_missing_projects RAILS_ENV=production
[git@nya gitlab]$ mkdir /home/git/gitlab-satellites
[git@nya gitlab]$ bundle exec rake gitlab:satellites:create RAILS_ENV=production
[git@nya gitlab]$ bundle exec rake gitlab:wiki:migrate RAILS_ENV=production
パーミッションの設定など
[git@nya gitlab]$ chmod 700 /home/git/.ssh
[git@nya gitlab]$ chmod 600 /home/git/.ssh/authorized_keys
[git@nya gitlab]$ chown -R git /home/git/gitlab/log/
[git@nya gitlab]$ chown -R git /home/git/gitlab/tmp/
[git@nya gitlab]$ chmod -R u+rwX /home/git/gitlab/log/
[git@nya gitlab]$ chmod -R u+rwX /home/git/gitlab/tmp/
[git@nya gitlab]$ mkdir /home/git/gitlab/tmp/pids/
[git@nya gitlab]$ chmod -R u+rwX /home/git/gitlab/tmp/pids
unicorn設定
[git@nya gitlab]$ cp config/unicorn.rb config/unicorn.rb.old
[mikito@nya ~]$ cp config/unicorn.rb.example config/unicorn.rb
[mikito@nya ~]$ vim config/unicorn.rb # 待ち受けポートを変更
listen "127.0.0.1:8080", :tcp_nopush => true
gitconfig設定
[git@nya gitlab]$ git config --global user.name "Gitlab"
[git@nya gitlab]$ git config --global user.email "gitlab@gitlab.mikinya.net"
起動スクリプト更新
[mikito@nya ~]$ sudo -E curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab
[mikito@nya ~]$ sudo vim /etc/init.d/gitlab # rvm環境変数を追加
#
# set rvm environment valiables.
#
export PATH=/home/git/.rvm/gems/ruby-1.9.3-p392@gitlab/bin:/home/git/.rvm/gems/ruby-1.9.3-p392@global/bin:/home/git/.rvm/rubies/ruby-1.9.3-p392/bin:/home/git/.rvm/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/git/bin
export GEM_HOME=/home/git/.rvm/gems/ruby-1.9.3-p392@gitlab
export GEM_PATH=/home/git/.rvm/gems/ruby-1.9.3-p392@gitlab:/home/git/.rvm/gems/ruby-1.9.3-p392@global
export MY_RUBY_HOME=/home/git/.rvm/rubies/ruby-1.9.3-p392
export IRBRC=/home/git/.rvm/rubies/ruby-1.9.3-p392/.irbrc
VirtualHost再設定
[mikito@nya ~]$ sudo vim /etc/httpd/conf/httpd.conf
/home/gitlab/gitlab/public -> /home/git/gitlab/public
[mikito@nya ~]$ sudo /etc/init.d/httpd graceful
SSH 環境変数(参考: https://github.com/gitlabhq/gitlab-shell/issues/12)
[mikito@nya ~]$ sudo vim /etc/ssh/sshd_config
PermitUserEnvironment yes
[mikito@nya ~]$ sudo su - git
[git@nya ~]$ env | grep -E "^(GEM_HOME|PATH|RUBY_VERSION|MY_RUBY_HOME|GEM_PATH)=" > ~/.ssh/environment
[git@nya ~]$ exit
[mikito@nya ~]$ sudo /etc/init.d/sshd restart
再起動
[mikito@nya ~]$ sudo service gitlab start
いらないの削除
[mikito@nya ~]$ sudo su - git
[git@nya ~]$ rm -rf bin
[git@nya ~]$ rm -rf gitolite/
[git@nya ~]$ rm projects.list
[git@nya ~]$ cd repositories/
[git@nya repositories]$ rm -rf gitolite-admin.git/
[git@nya repositories]$ rm -rf testing.git/
[git@nya repositories]$ rm -rf root
[git@nya ~]$ exit
[mikito@nya ~]$ sudo rm /home/git/gitlab.pub
[mikito@nya ~]$ sudo userdel -r gitlab
CentOS6にApache + RVM + UnicornでGitlab4.2構築
GitlabはGithubのオープンソースクローンで
プライベートリポジトリをつくることはもちろん、
ユーザ管理や公開鍵管理などをWebブラウザ上からできる、おされなツールです。
さらに、プロジェクト毎にWallやWikiが使えたり、ブランチのネットワークグラフを表示したり、マージリクエストの管理などもできます。
最近構築する機会があったのでメモ
# ただし、5.0へのメジャーアップデートでGitoliteが必要なくなるらしく、もっと簡単にインストールが済むようになるかもです。
とりあえず現時点の手順です。
極力手間をかけず、メンテもしやすいような感じで構成してみました。
メモ程度に残していたログを都合よくまとめただけなので、へんなとこあるかもです。
あしからず。
公式の手順はこちら
gitlabhq/installation.md at 4-2-stable · gitlabhq/gitlabhq · GitHub
必要そうなパッケージインストール
[mikito@nya ~]$ sudo yum -y install libyaml-devel openssl-devel gdbm-devel readline-devel ncurses-devel libffi-devel redis libxml2-devel libxslt-devel libicu-devel curl git-core openssh-server postfix
Redis起動、自動起動設定
[mikito@nya ~]$ sudo /etc/init.d/redis
[mikito@nya ~]$ sudo chkconfig redis on
[mikito@nya ~]$ chkconfig --list redis
redis 0:off 1:off 2:on 3:on 4:on 5:on 6:off
データベース設定(MySQL)
[mikito@nya ~]$ mysql -u root -p
mysql> create user 'gitlab_user'@'localhost' identified by '*******'
mysql> CREATE DATABASE IF NOT EXISTS `gitlab_db` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlab_db`.* TO 'gitlab_user'@'localhost';
System User作る
[mikito@nya ~]$ sudo adduser -r -s /bin/sh -c 'git' -d /home/git -m git
[mikito@nya ~]$ sudo adduser -r -s /bin/sh -c 'gitlab' -d /home/gitlab -m gitlab
[mikito@nya ~]$ sudo chmod g+rx /home/git
[mikito@nya ~]$ sudo usermod -a -G git gitlab
gitlabユーザのSSH Key作ってコピーしとく
[mikito@nya ~]$ sudo -u gitlab -H ssh-keygen -q -N '' -t rsa -f /home/gitlab/.ssh/id_rsa
[mikito@nya ~]$ sudo cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub
[mikito@nya ~]$ sudo chmod 0444 /home/git/gitlab.pub
Gitolite設定
[mikito@nya ~]$ sudo su - git -s /bin/bash # gitユーザで作業
[git@nya ~]$ git clone -b gl-v320 https://github.com/gitlabhq/gitolite.git gitolite
[git@nya ~]$ mkdir /home/git/bin
[git@nya ~]$ sh -c 'printf "%b\n%b\n" "PATH=\$PATH:/home/git/bin" "export PATH" >> /home/git/.profile'
[git@nya ~]$ sh -c 'gitolite/install -ln /home/git/bin'
[git@nya ~]$ sh -c "PATH=/home/git/bin:$PATH; gitolite setup -pk /home/git/gitlab.pub"
[git@nya ~]$ chmod 750 /home/git/.gitolite/
[git@nya ~]$ chmod -R ug+rwX,o-rwx /home/git/repositories/
[git@nya ~]$ find /home/git/repositories -type d -print0 | xargs -0 chmod g+s
list of known hostsに追加とかcloneチェックとか
[mikito@nya ~]$ sudo su - gitlab -s /bin/bash # gitlabユーザで作業
[gitlab@nya ~]$ ssh git@localhost
The authenticity of host '[127.0.0.1]:2222 ([127.0.0.1]:2222)' can't be established.
RSA key fingerprint is 24:11:23:ff:35:72:9f:e0:5e:36:5f:c4:f9:4d:c7:f8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[127.0.0.1]:2222' (RSA) to the list of known hosts.
PTY allocation request failed on channel 0
hello gitlab, this is git@nya running gitolite3 v3.2-gitlab-patched-0-g2d29cf7 on git 1.7.1
...
実際に管理用のリポジトリcloneしてみる
[gitlab@nya ~]$ git clone git@localhost:gitolite-admin.git gitolite-admin
Initialized empty Git repository in /home/gitlab/gitolite-admin/.git/
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
[gitlab@nya ~]$ ls
gitolite-admin
[gitlab@nya ~]$ rm -rf gitolite-admin/
Git設定
[gitlab@nya gitlab]$ git config --global user.name "Gitlab"
[gitlab@nya gitlab]$ git config --global user.email "gitlab@gitlab.mikinya.net"
RVM & Gemインストール
[gitlab@nya ~]$ curl -L --insecure https://get.rvm.io | bash -s stable --ruby
[gitlab@nya ~]$ source .bash_profile
[gitlab@nya ~]$ rvm install 1.9.3
[gitlab@nya ~]$ gem install bundler --no-rdoc --no-ri
[gitlab@nya ~]$ gem install charlock_holmes --version '0.6.9' --no-rdoc --no-ri
[gitlab@nya ~]$ rvm gemset create gitlab
[gitlab@nya ~]$ rvm use 1.9.3@gitlab --default
Gitlabインストール
[gitlab@nya ~]$ git clone https://github.com/gitlabhq/gitlabhq.git gitlab
[gitlab@nya ~]$ cd gitlab/
[gitlab@nya gitlab]$ git checkout 4-2-stable
[gitlab@nya gitlab]$ chmod -R u+rwX log/
[gitlab@nya gitlab]$ chmod -R u+rwX tmp/
[gitlab@nya gitlab]$ mkdir gitlab-satellites
[gitlab@nya gitlab]$ cp config/gitlab.yml.example config/gitlab.yml
[gitlab@nya gitlab]$ vim config/gitlab.yml # host名とか設定
[gitlab@nya gitlab]$ cp config/database.yml.mysql config/database.yml
[gitlab@nya gitlab]$ vim config/database.yml
database.yml
# # PRODUCTION # production: adapter: mysql2 encoding: utf8 reconnect: false database: gitlab_db pool: 5 username: gitlab_user password: "***********" # host: localhost # socket: /tmp/mysql.sock
unicorn設定
[gitlab@nya gitlab]$ cp config/unicorn.rb.example config/unicorn.rb
[gitlab@nya gitlab]$ vim config/unicorn.rb
unicorn.rb
# uncomment and customize to run in non-root path # note that config/gitlab.yml web path should also be changed # ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab" app_dir = "/home/gitlab/gitlab/" worker_processes 2 working_directory app_dir # Load app into the master before forking workers for super-fast # worker spawn times preload_app true # nuke workers after 30 seconds (60 is the default) timeout 30 # listen on a Unix domain socket and/or a TCP port, #listen 8080 # listen to port 8080 on all TCP interfaces #listen "127.0.0.1:8080" # listen to port 8080 on the loopback interface #listen "#{app_dir}/tmp/sockets/gitlab.socket" listen "127.0.0.1:8080", :tcp_nopush => true pid "#{app_dir}/tmp/pids/unicorn.pid" stderr_path "#{app_dir}/log/unicorn.stderr.log" stdout_path "#{app_dir}/log/unicorn.stdout.log" # http://www.rubyenterpriseedition.com/faq.html#adapt_apps_for_cow if GC.respond_to?(:copy_on_write_friendly=) GC.copy_on_write_friendly = true end before_fork do |server, worker| # the following is highly recomended for Rails + "preload_app true" # as there's no need for the master process to hold a connection defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! ## # When sent a USR2, Unicorn will suffix its pidfile with .oldbin and # immediately start loading up a new version of itself (loaded with a new # version of our app). When this new Unicorn is completely loaded # it will begin spawning workers. The first worker spawned will check to # see if an .oldbin pidfile exists. If so, this means we've just booted up # a new Unicorn and need to tell the old one that it can now die. To do so # we send it a QUIT. # # Using this method we get 0 downtime deploys. old_pid = "#{server.config[:pid]}.oldbin" if File.exists?(old_pid) && server.pid != old_pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH # someone else did our job for us end end end after_fork do |server, worker| # Unicorn master loads the app then forks off workers - because of the way # Unix forking works, we need to make sure we aren't using any of the parent's # sockets, e.g. db connection defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection # Redis and Memcached would go here but their connections are established # on demand, so the master never opens a socket end
フックの設定
[gitlab@nya gitlab]$ cp /home/gitlab/gitlab/lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
[gitlab@nya gitlab]$ chown git:git /home/git/.gitolite/hooks/common/post-receive
gemインストール、Migration & Setup
[gitlab@nya gitlab]$ bundle install --deployment --without development test postgres
[gitlab@nya gitlab]$ bundle exec rake gitlab:setup RAILS_ENV=production
Applicationチェック
[gitlab@nya gitlab]$ bundle exec rake gitlab:env:info RAILS_ENV=production
[gitlab@nya gitlab]$ bundle exec rake gitlab:check RAILS_ENV=production
それっぽいのが出ればOKかと
起動スクリプト設定
[mikito@nya ~]$ sudo -E curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlab-recipes/4-2-stable/init.d/gitlab
[mikito@nya ~]$ sudo vim /etc/init.d/gitlab #RVMの環境変数の設定を追加
/etc/init.d/gitlab
#! /bin/bash # GITLAB # Maintainer: @randx # App Version: 4.0 ### BEGIN INIT INFO # Provides: gitlab # Required-Start: $local_fs $remote_fs $network $syslog redis-server # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: GitLab git repository management # Description: GitLab git repository management ### END INIT INFO # # set rvm environment valiables. # export PATH=/home/gitlab/.rvm/gems/ruby-1.9.3-p392@gitlab/bin:/home/gitlab/.rvm/gems/ruby-1.9.3-p392@global/bin:/home/gitlab/.rvm/rubies/ruby-1.9.3-p392/bin:/home/gitlab/.rvm/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/gitlab/bin export GEM_HOME=/home/gitlab/.rvm/gems/ruby-1.9.3-p392@gitlab export GEM_PATH=/home/gitlab/.rvm/gems/ruby-1.9.3-p392@gitlab:/home/gitlab/.rvm/gems/ruby-1.9.3-p392@global export BUNDLE_PATH= export MY_RUBY_HOME=/home/gitlab/.rvm/rubies/ruby-1.9.3-p392 export IRBRC=/home/gitlab/.rvm/rubies/ruby-1.9.3-p392/.irbrc set -u set -e APP_ROOT="/home/gitlab/gitlab" DAEMON_OPTS="-c $APP_ROOT/config/unicorn.rb -E production" PID_PATH="$APP_ROOT/tmp/pids" UNICORN_PID="$PID_PATH/unicorn.pid" SIDEKIQ_PID="$PID_PATH/sidekiq.pid" STOP_SIDEKIQ="RAILS_ENV=production bundle exec rake sidekiq:stop" START_SIDEKIQ="RAILS_ENV=production bundle exec rake sidekiq:start" NAME="unicorn" DESC="Gitlab service" check_pid(){ if [ -f $UNICORN_PID ]; then PID=`cat $UNICORN_PID` SPID=`cat $SIDEKIQ_PID` STATUS=`ps aux | grep $PID | grep -v grep | wc -l` else STATUS=0 PID=0 fi } start() { cd $APP_ROOT check_pid if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then # Program is running, exit with error code 1. echo "Error! $DESC $NAME is currently running!" exit 1 else if [ `whoami` = root ]; then sudo -u gitlab -H bash -l -c "nohup bundle exec unicorn_rails $DAEMON_OPTS > /dev/null 2>&1 &" sudo -u gitlab -H bash -l -c "mkdir -p $PID_PATH && $START_SIDEKIQ > /dev/null 2>&1 &" echo "$DESC started" fi fi } stop() { cd $APP_ROOT check_pid if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then ## Program is running, stop it. kill -QUIT `cat $UNICORN_PID` sudo -u gitlab -H bash -l -c "mkdir -p $PID_PATH && $STOP_SIDEKIQ > /dev/null 2>&1 &" rm "$UNICORN_PID" >> /dev/null echo "$DESC stopped" else ## Program is not running, exit with error. echo "Error! $DESC not started!" exit 1 fi } restart() { cd $APP_ROOT check_pid if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then echo "Restarting $DESC..." kill -USR2 `cat $UNICORN_PID` sudo -u gitlab -H bash -l -c "mkdir -p $PID_PATH && $STOP_SIDEKIQ > /dev/null 2>&1 &" if [ `whoami` = root ]; then sudo -u gitlab -H bash -l -c "mkdir -p $PID_PATH && $START_SIDEKIQ > /dev/null 2>&1 &" fi echo "$DESC restarted." else echo "Error, $NAME not running!" exit 1 fi } status() { cd $APP_ROOT check_pid if [ "$PID" -ne 0 -a "$STATUS" -ne 0 ]; then echo "$DESC / Unicorn with PID $PID is running." echo "$DESC / Sidekiq with PID $SPID is running." else echo "$DESC is not running." exit 1 fi } ## Check to see if we are running as root first. ## Found at http://www.cyberciti.biz/tips/shell-root-user-check-script.html if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" exit 1 fi case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload|force-reload) echo -n "Reloading $NAME configuration: " kill -HUP `cat $PID` echo "done." ;; status) status ;; *) echo "Usage: sudo service gitlab {start|stop|restart|reload}" >&2 exit 1 ;; esac exit 0
Gitlab起動、自動起動設定
[mikito@nya ~]$ sudo chmod +x /etc/init.d/gitlab
[mikito@nya ~]$ sudo service gitlab start
[mikito@nya ~]$ sudo chkconfig gitlab on
[mikito@nya ~]$ chkconfig --list gitlab
gitlab 0:off 1:off 2:on 3:on 4:on 5:on 6:off
iOSとAndroidのプロジェクトを統合する
最近cocos2d-xをよく勉強してます。
cocos2dのドキュメントはたくさん出てくるけど、
なかなかxのは出てこない...
読み替えたり、挙動が若干ちがったりと一苦労です。
前、環境構築の時にもすこし触れましたが、
最初に悩んだXcodeのプロジェクトとAndroidのプロジェクトどう統合するかの手順をもう少し詳しく説明します。
正規の手順かはどうだかわかりません。
Androidプロジェクト作成
cocos2d-xのルートディレクトリにターミナルで移動してcreate-android-project.shを実行します。
$ ./create-android-project.sh
ルートディレクトリに移動しないといけないのが何ともですが、
Bundle IDなどを入力すると無事プロジェクトが出力されます。
プロジェクトがcocos2d-xのルートに出力され、
ファイルがたくさんあってみづらいので、好きなところに移動させます。
自分はいつも~/Projectsってとこにいろいろ置いてます。
Xcodeプロジェクト作成
Xcodeを立ち上げCreate a New Xcode Projectで
Cocos2d-xを選びます。
こちらも手順どおりすすめて
さっき作ったAndroidプロジェクトの中に保存します。
XcodeのほうもMofuMofuというプロジェクト名で保存したので、
プロジェクト全体はこんな感じになります。
ここでいったんXcodeを終了させて
いま作ったXcodeプロジェクトのディレクトリ名をproj.iosに変更します。
こんな感じになります。
Xcodeプロジェクト設定
作成したXcodeプロジェクトを再度開きます。
XcodeからClassesを削除します。
またプロジェクト名/Resourcesの
CloseNormal.png
CloseSelected.png
HelloWorld.png
を削除して、アイコン画像やスプラッシュinfo.plistなどiOSアプリに必要なリソースだけにします。
次に、Androidプロジェクトと共有する
ClassesとResourcesのディレクトリをインポートします。
Fils -> Add Items To ....からproj.iosと同じ階層にあるClassesを選択します。
このときCopy Items Into...オプションは外します。
Resourcesも同様にインポートします。
最終的にXcodeはこんな感じになります。
これでXcodeの設定は完了です。
Runを実行してちゃんと起動すればOKです。
Androidプロジェクト設定
Eclipseを起動します。
File -> Importから
Android -> Existing Android Code Into Workspaceを選択
Cocos2d-xから出力したディレクトリを選択してインポートします。
ここで、Androidプロジェクトを移動してるのでLibraryの参照でエラーがでてます。
プロジェクト名をクリックしてでてくるProperties -> Androidメニューで
エラーになってるlibcocos2dxを削除します。
その後、環境構築でEclipseに追加してあったlibcocos2dxを再度設定します。
で、自分の環境だとAndroidManifest.xmlでもエラーがでてました。
どうやら生成されたアイコン名がiconからic_launcher.pngに変わってるらしく、そこを修正します。
次に、build_native.shを修正します。
COCOS2DX_ROOTを.bashrcとかに追加してある場合はコメント化、
それかCocos2d-xのルートディレクトリを直に設定します。
38 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
39 # ... use paths relative to current directory
40 # COCOS2DX_ROOT="$DIR/../.."
41 APP_ROOT="$DIR/.."
42 APP_ANDROID_ROOT="$DIR"
とりあえず設定はこれで終了です。
Androidでもビルドして起動してみます。
build_native.shを実行します。
$ .build_native.sh
Android機をつないで、
EclipseからRunします。
iOSと同じ画面が出たでしょうか。
実際の開発のながれ
Xcodeでソースなどを追加、編集、デバッグをメインでやって
ある程度機能ができたらEclipseでAndroidのデバッグって感じでしょうか。
jni/Android.mkにソースのリストを追加しないといけないないですし
まだまだ、わからいことが多いですが、
慣れてきたらそのうち開発自体のTipsものせていきたいです。