タグ

ブックマーク / akisute.com (10)

  • iOS SDK 7.1 / Xcode 5.1にアップグレードした時に踏んだ地雷まとめ

    日iOS SDK 7.1 / Xcode 5.1にアップグレードを行った際にぶつかった所々の問題とTipsをまとめておきたいと思います。 arm64対応とCocoaPods Xcode 5.1からデフォルトのビルド設定$(ARCHS_STANDARD_32_BIT)がarm64、要するに64bit対応を含むようになり、arm64 armv7 armv7sの3つのアーキテクチャに対してビルドを行うようになりました。ソースコードからビルドを行っている場合は大抵問題ないと思うのですが、以下の様なケースでarm64対応を切りたい場合があります。 プロジェクト内にarm64アーキテクチャに対応していないstaticライブラリが含まれている場合。 64bitになると危険なバグが発生するおそれがあるコードが含まれている場合、例えばCGFloatやNSIntegerのサイズが変化したり、各種ポインタのサ

  • ユビレジを支える技術

    年末にユビレジさんのところでちょっと仕事のお手伝いをさせていただいたので、その時の内容をご紹介させていただきます。 ■ユビレジって何? iPadをキャッシュレジスタに変えてしまうサービスです。会計からレシートの印刷までやってくれます。最近飲店などでレジがなくiPadだけが置いてあるお店などを散見するかと思いますが、アレがそうです。一般的なキャッシュレジスタ+店舗システムよりもはるかに安価で導入でき、しかも使いやすいというのがウリです。 開発者的に言うと、Scalaモヒカンの@kmizuさんやiOSモヒカンの@k_katsumiさんなどが在籍されていまして、エンジニアのレベルが高いです。 ■開発スタイル 少人数のため、厳密なウォーターフォール管理やアジャイル/スクラムなどは無く、チケット/Issueベースの開発になっています。githubをフル活用します。すべてPull Request(以

    ユビレジを支える技術
  • Parse.com の Cloud Code ハマりどころ

    Parse.comのCloud Codeを触っていてハマった点や気づきにくい仕様を列挙させて頂きます。 ■Parse.Cloud.useMasterKeyを呼び出すことで特権ユーザー権限になれるCloud Code上でACLによるアクセス制限を無視して現在のrequest.userとは関係なしにデータを操作したいということが多々あるかと思います。そのような場合は以下のようにリクエスト処理の先頭でParse.Cloud.useMasterKeyメソッドを呼び出してください。 useMasterKeyの効果は呼び出された瞬間からリクエストが終了するまで有効です。 ■Parse.Cloud.beforeSaveやParse.Cloud.afterSaveはData Browserから直接Rowを追加した場合にも呼び出されるこれは意外とハマりどころです。例えばData BrowserからUserを

  • A-Liaison BLOG: Objective-C で文字列リテラルに \0 を含めたいときの作戦

    Xcode 4.0 から LLVM が標準のコンパイラとなり、各種警告が非常に厳しくなっています。その中でも特に今回は文字列リテラルに \0 が含まれているときの警告について回避策を発見したのでご紹介したいと思います。 Objective-C では文字列リテラルは @"abesi" のように @"" で囲んで表現します。このリテラルは(あくまで推測で確定ではないのですが)コンパイラによってコンパイル時に CFSTR("abesi") に置換され、 CFStringRef 型としてプログラム中に定義されているようです。さて問題はここからで、 Xcode 4.0 が内部的に構文解析のために使っている LLVM がこのリテラル中に \0 、要するにNULL文字が含まれていると以下のような警告を出すようになってしまったのですCFString literal contains NUL charact

  • Unity の PostprocessBuildPlayer を使って Weak Framework を追加する方法

    ※2013/11/27追記: 第二版を公開しました。 UnityでiOSのアプリを作っていて困ることの一つに、iOSが提供するシステムフレームワークへのリンクをプロジェクトに追加するのが超面倒くさいという問題が挙げられます。UnityがiOSアプリを書きだした後、手動でXcode上からシステムフレームワークを追加してもいいのですが、これはとんでもなく面倒です。 そこでUnityジャパンの伊藤さんという方が PostprocessBuildPlayer という仕組みと Ruby の xcodeproj ライブラリを使ってビルド時に自動的にシステムフレームワークを追加する仕組みを公表してくださいました。お陰様で随分とはかどっていたのですが、その方法では実はシステムフレームワークをWeakリンク(Optionalリンク)することができなかったのです。これでは例えばSocial.framework

  • Jenkins を iOS アプリ開発に導入してみた (GHUnit編)

    前回 はSenTestKitを用いてJenkins上で単体テストの自動実行を行いました。今回はGHUnitを使った単体テストの自動実行にチャレンジしてみたいと思います。またついでといっては何ですが、単体テスト時に必要になってくるモックを作成するためのライブラリOCMockも同時に導入してみようと思います。 ■なぜGHUnitを使うのか GHUnitを使うことで、SenTestingKitと比べて以下のようなメリットが得られます。 非同期処理のテストを行うための仕組みが用意されている(GHAsyncTestCase)これをSenTestingKitないし他のテスティングフレームワークでやろうとすると大変骨が折れます。 .app形式(要するに実際のiOSアプリケーション)でテストを実行するため、UIApplicationやUIWindowといったUIコンポーネントを使うクラスのテストが可能にな

    Jenkins を iOS アプリ開発に導入してみた (GHUnit編)
  • Jenkins を iOS アプリ開発に導入してみた (SenTestKit編)

    最近、iOSアプリの開発でも継続的インテグレーション(CI)を取り入れていくプロジェクトが増加傾向にあるようで、各種ツールやライブラリ、ノウハウが出回ってきているように感じられます。そこで私も早速iOSアプリ開発でのCI導入を試してみることにしました。今回の導入試験では、以下のような環境を想定して行いました。 iOSアプリの開発を、Xcode 4.X系のプロジェクトとして行う。 VCSにはgitを採用し、githubの公開リポジトリをリポジトリサーバーとして使用する。 CIサーバにはMacを採用し、プロジェクトをビルドするためにXcode 4.Xをインストールしておく。 ■必要なツールを準備する CIといったら、まずは何はなくともJenkinsです。 http://jenkins-ci.org/ ここでは導入について詳しくは挙げませんが、私は以下のを参考にしました。 https://gi

    Jenkins を iOS アプリ開発に導入してみた (SenTestKit編)
  • CocoaPods に対応していないライブラリを集めた自分用リポジトリを作る方法

    この記事はiOS Advent Calendar 2011の7日目の記事になります。ということでもうすぐクリスマスですね。クリスマスプレゼントの準備はお済みですか?まだの方はちょっとオシャレに、今年のプレゼントCocoaPodsでご用意してみてはいかがでしょうか? ■ご存じ、ないのですか!? さて念のためCocoaPodsについておさらい。要するにiOS/OS X用のmavenです。以上。細かい点については以下の記事が詳しいのでそちらをご参照ください。っていうかMac Dev JP Advent Calendarとネタがもろかぶりhttp://iphone-dev.g.hatena.ne.jp/laiso/20111117/1321437909 http://d.hatena.ne.jp/Watson/20111204/mac_dev_jp_advent_calendar_cocoapo

  • NSOperation を使って外部 API から非同期に結果を取得してみる

    iPhone / iPad のアプリを作っていると、頻繁に登場するのが「外部 API を HTTP 経由で実行して結果を XML / JSON で取得し、それを解析してモデルクラスに変換してデータ構造に突っ込む」パターンです。当然たくさんの先人の皆様がすでに効率的なライブラリを作成されているのですが、あえて私も車輪の再発明に挑戦してみました。今回使用したのは NSOperation クラスです。 NSURLConnection クラスとデリゲートを使うだけでも簡単に非同期通信を実現することができるのですが、さらに NSOperation クラスと NSOperationQueue を使うことでさらにタスク間の依存関係を簡単に設定できたり、タスクの並列度を簡単に制御したりできそうなので、挑戦してみました。 2010/12/29追加: 発展版をASIHTTPRequestを使って作成してみまし

  • Python で Xcode のビルドスクリプトを書く方法

    以前こんな記事を書きましたが、今回はもっと実践的なお話。PythonでXcodeのビルドスクリプトを書いてハッピーになろうというお話です。 ■なぜXcodeのビルドスクリプトを書くのか Xcodeのビルド機能だけでは出来ないことをやりたいからです。たとえば、特定のディレクトリの中に入っているリソースを、ビルド時にアプリにパッケージングしたい。ビルドする前に、特定のリソースを暗号化して、アプリにパッケージングしたい。といった要望が結構ありますが、これらはビルドスクリプトを使えば簡単に可能になります。 手でいちいちやるより楽で安全ですね。 ■なぜPythonか 理由はいくつかあります。Windows, Mac, Linux, 全ての環境で動く。したがって、万が一のときにはビルドスクリプトだけを移植できる。sh とか csh とか非力すぎてやってらんない。 zsh もつかえるけど Python

    Python で Xcode のビルドスクリプトを書く方法
  • 1