2016年11月23日水曜日

Xcode 7.3 で ERROR ITMS - 90167 No. app bundles found in the package が発生した場合の対処方法

オフィス狛 技術部です。

現時点(2016/11/23)の Xcode の最新は 8.1 ですが、
Swift 2.3 で作られたプロジェクトを移行するには、色々とやらないといけない事があります。

という訳で弊社では、まだ移行出来ないプロジェクトなどは、
Apple Developer サイトから Xcode 7.3 をダウンロードして、8.1 と共有して使っています。

今回、Swift2.3 で作られたプロジェクトをリリースする事になり、
いつもの手順でXcodeで「Archive → Upload to App Store」の手順を行なったら・・・・

ERROR ITMS - 90167 No. app bundles found in the package

というエラーが発生しました。

このままではストアにアップロード出来ないので、調べて見ると以下のような情報が。

stack overflow - ERROR ITMS - 90167 No. app bundles found in the package -

要約すると、
「macOS Sierra 10.12 で Xcode 7.3 を使ってApp Store へのアップロードは出来ない」
「この不具合は、次のOSのアップデート時に修正されるようだ」
さすがに次のアップデートを待つ事は出来ないので、他の方法を探ります。

そう言えば、App Storeへアップロードするツールがあったな・・・という事で、
「Application Loader」というツールを使います。

1) まずは、「Archive」から、ipaファイルを作っておきます。


2) そして、Xcodeのメニューから、「Application Loader」を起動します。



3) 先ほど作成したipaファイルを選択します。


4) アップロードが始まります。


5) アップロード完了です。



こういう方法も覚えておくと、いざという時に役に立ちますね。


, ,

2016年11月13日日曜日

MySQLの timestamp型が、なかなか厄介。

オフィス狛 技術部です。

弊社ではしばらく使う事のなかったMySQLですが、
とあるプロジェクトで久しぶりに使い、そしてハマりました。

問題となったテーブル

まず、以下のようなCreate文を実行しました。
CREATE TABLE koma_test (
      koma_test_id bigint NOT NULL AUTO_INCREMENT,
      koam_code varchar(2) NOT NULL,
      test_count int,
      test_fee decimal(7,0),
      has_deleted boolean DEFAULT false NOT NULL,
      entry_datetime timestamp NOT NULL,
      entry_user varchar(100),
      update_datetime timestamp NOT NULL,
      update_user varchar(100),
      PRIMARY KEY (koma_test_id)
);

entry_datetime」「update_datetime」などは、システムで良くあるタイムスタンプ系のカラムです。
日時はプログラム側で設定する事を想定しています。

発生した現象

本来、プログラム側では登録時(Insert時)のみ「entry_datetime」が設定され、
それ以降、その値は変わらない想定でした。

ところが、テーブル更新時(Update時)に「entry_datetime」が勝手に更新されていたのです。
当然最初はプログラムを疑いましたが、プログラムに問題はありませんでした。

で、ちょっとハマった後、何気なく作成されたテーブルの定義を確認すると、
「entry_datetime」に「CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP」が付いているのです。
(「update_datetime」には付いていない)

もちろん、Create文には、そのような指定はしていません。
どうやら、timestamp型には、デフォルトで「CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP」が付いてしまうようです。
※他のサイトの情報だと、NULL 許可していても、NOT NULL にもなってしまうようです。

なんて余計なお世話だ・・・とも思いましたが、
まあ、「timestamp」という属性名だし、そういう事になりますよね・・・
タイムスタンプ系の使い道で無い場合、型は「datetime」にすれば良いだけですからね。

とは言うものの、今のままでは、本来の用途に使えないので、テーブルの定義を変更します。
ALTER TABLE koma_test CHANGE entry_datetime entry_datetime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

注意事項ですが、デフォルト値の「CURRENT_TIMESTAMP」も削除したいからといって、
ALTER TABLE koma_test CHANGE entry_datetime entry_datetime TIMESTAMP NOT NULL;
というSQLを流してしまうと、
またデフォルトの「CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP」が付いてしまいます。

MySQLを使い込んでいる方ですと、「そりゃ、そうでしょ」レベルの話なのかもしれませんが、
久しぶりに使うと、ハマってしまいますね。


2016年11月7日月曜日

Raspberry Pi 3 で 3G 通信をしてみる。 〜 Raspberry Pi 3 への 3GPI 取付と設定 〜

オフィス狛 技術部です。

Raspberry Pi で 3G 通信をしてみよう! という事で、
今回は、Raspberry Pi と 3GPIの取り付けを行なっていきます。

・SIMカード準備

SIMはカードのような物に付いているので、丁寧に取り外します。


外したSIMを変換アダプタ(標準SIM)へセットします。
今回は、汎用性を考えて(この検証以外でも使いたいので)、
nano(ナノ)サイズSIMを購入しましたが、標準SIMサイズを購入していれば、上記作業は不要です。
※SORACOMでは、ナノ、マイクロ、標準SIMのサイズが用意されています。

・3GPI同梱品確認

実際の作業の前に、3GPIの同梱品を確認します。

【同梱品一覧】(取扱説明書より)
  • 3GPI本体 1枚
  • 接続設定済Raspbian入microSDカード(SD用アダプタ付) 1枚
  • 3Gアンテナ 1本
  • ACアダプタ(12V 1A) 1個
  • USB-A雄-USBmini-b雄 100mmケーブル 1本
  • Raspberry Pi ModelB+用六角スペーサ(M2.6)セット 2セット

・Raspberry Pi に 3GPI を取り付ける

では、Raspberry Pi に3GPIをセットしたいと思います。
まずは写真の赤枠の部分に、六角スペーサを取り付けます。


こんな感じです。
ナットで裏側から固定しています。


裏側はこんな感じです。


続いて、Raspberry Pi のGPIOピンに、3GPIを差し込みます。
結構強めに押し込まないとちゃんとハマりませんが、
繊細なので、壊さないように力込めましょう。
GPIOピンに差し込んだ後に、六角スペーサのネジを締めます。
写真の赤枠がネジを締めた後の状態です。

・SDカード取付

本体をひっくり返して、microSDカードを差し込みます。
※microSDカードの裏表を間違えないように。

・SIMカード取付

SIMスロットは閉じている状態の時に、奥に押す感じでずらすと開きます。
IC端子と切れている部分の位置に気を付けてセットします。


スロットを閉じた後は、先程と逆に手前に引く感じでずらすと、固定されます。

・その他取付

3Gアンテナを取り付けます。端子が二つありますので、
"RF"と記載されている方に取り付けます。
結構力を入れないとネジが回りませんので、壊さないように力込めましょう。


Raspberry Pi のUSBと、3GPIのUSBmini-Bを繋ぎます。


後は電源投入ですが、その前に、
Raspberry Pi にUSBキーボードと、HDMIケーブルを接続しています。


最後に3GPI側に電源を接続します。


起動しました。
3GPIが梱包されていた箱の内側に、UserNameとPasswordが記載されているので、
入力してログインします。

・SSH接続設定

Raspberry Pi へTeraTermなどで接続する為の設定を行います。
コンソール上で「sudo raspi-config」とコマンドを打ちます。

起動した設定画面で「9 Advanced Options」を選択します。


次に出てきた画面で「A4 SSH」を選択します。


SSH Serverを有効(Enable)にします。


セットアップはここまでとなります。
写真がセットアップ後の状態です。(LANケーブルも接続しています)
大きさの比較に、フリスクも置いてみました。

※SORACOMは(と言うより、データ通信のみのSIMはほとんど)、
グローバルIPではなくプライベートIPが割り振られます。
その為、SIMの接続を利用したリモート接続が出来ません。
(中継サーバーを設ける事で可能になるようですが、今回は記載しません)
という事で、リモート接続をする為に、LANケーブルを接続しています。


さて、3G通信の準備が完了したので、次は実際に通信速度を測ってみようと思います。

3)通信速度を測ってみる(近日公開予定)


2016年11月1日火曜日

Raspberry Pi 3 で 3G 通信をしてみる。〜 SORACOM アカウント登録から SIM 登録まで 〜

オフィス狛 技術部です。

Raspberry Pi で 3G 通信をしてみよう! という事で、
まずは、3G通信を行う為のSIMの準備を行います。

・SIMの購入

今回購入した SIM は「SORACOM Air SIM カード(データ通信のみ) (ナノ)」となります。
SORACOM のサイトから購入する事も可能ですが、今回は、即日納品可能な Amazonで購入しました。

・SORACOMアカウント登録〜ログイン

SIMが用意出来たら、SORACOM社 のサイト(https://soracom.jp/)にてアカウント登録を行います。

アカウント登録後、ログインすると、以下のような画面が表示されます。
まだ SIM は何も登録されていない状態です。

・SIMの登録

「+SIM 登録」押すと、SIM の情報を入力するポップアップが表示されます。
IMSI・パスコードは、購入した SIM が取り付けてあるカードの後ろに記載してあります。

登録すると、先程の SIM の一覧に表示されます。

・通信料金

SORACOM社のサイト(ご利用料金 - 日本向け Air SIM)を見てもらうのが一番ですが、
注意すべき点は、「SIMを登録した時点から料金が発生する」という事です。
今回は、データ通信のみのSIMを登録したので、登録直後から、「1日5円」が発生します。 そして、実際に使い始めると、「1日10円」の基本料金+通信料が発生します。
(ま、それでもSORACOMは、かなりお安いと思います。)

さらに、使用する時間帯や、通信速度によっても料金が変わってくるので、気をつけましょう。

さて、SIMの準備が完了したので、次はRaspberry Pi 3 への 3GPI 取付と設定になります。


2)Raspberry Pi 3 への 3GPI 取付と設定
http://blog.officekoma.co.jp/2016/11/raspberry-pi-3-3g-raspberry-pi-3-3gpi.html