TOKOROM BLOG

iOSとかVimとかその他日々の雑多な技術情報

提供するXXXViewControllerの親クラスを差し替え可能にしたい! はてなブックマーク - 提供するXXXViewControllerの親クラスを差し替え可能にしたい!

Permalink

XXXViewControllerの親クラスを差し替えたいときありますよね?

UIKit内で言えばUITableViewControllerとかはその代表格。
外部ライブラリで言うと、Google Analytics SDKのGAITrackedViewControllerとか。

要するに、XXXViewControllerの継承して実現したい機能があるのに、既にYYYViewControllerのサブクラスなので使えないよーとなってしまうケース。

で、既存のものは置いておくとしても、自分が作るライブラリのXXXViewControllerについては、なんとかその親クラス差し替えの需要に応えられないものかなあと。

runtime使う?

いちおう class_setSuperclassという関数があるのですがDeprecated… なんか良い方法ないかな?と考えた結果、今のところ以下のかんじに落ち着きました。

会社でiOSアプリを扱うときのアカウント管理はこうするべきだった? はてなブックマーク - 会社でiOSアプリを扱うときのアカウント管理はこうするべきだった?

Permalink

2013年11月18日 追記

この記事を書いた後、何人かのかたから「うちでは同じApple IDで両方とも使えているよ」というご指摘をいただき、

  • Member Centerのほうにアカウント追加 -> iTunes Connectに同じアカウント追加という順番だと「警告は出るもののかまわずContinueすれば」同じApple IDでアカウント作成可能
  • iTunes Connectにアカウント追加 -> Member Centerに同じ追加という順番だと「複雑な手順にはなるものの適切な手順を通せば」同じApple IDでアカウント作成可能

失礼しました。
追加情報などあれば是非おねがいします!

概要

私はiOSアプリの開発を3年以上やっていますが、恥ずかしながら会社でこのためのアカウントを管理/運用する方法をきちんと把握できていませんでした。
というのも個人で開発するぶんにはそんな管理は必要なかったですし、これまで会社でアプリ開発するときも限られた数人だけが担当していたのでアカウントの管理とか必要がなかったのです(というのが言い訳です)。

おそらく、企業でiOSアプリ開発をしている人にとっては普通のことなんでしょうけど、私は今回はじめて知った部分がいくつかあったのでまとめさせていただきます。
どこかで困っているどなたかに参考になれば良いなというのと、もっとこうしたほうが良いというご意見をいただくのが目的です。

iOS Dev Center の構成

まず、iOS Dev Centerで今回説明する部分は以下のような構成になっています。

大きくは、

  • iOS Developer Program
  • Member Center
  • iTunes Connect

に分かれます。

メンバーを追加する方法が2つある??

今回、私が混乱してしまった部分がここでした。
iOSアプリ開発/公開のために必要なアカウントは、

  • Member CenterPeople
  • iTunes ConnectManage Users

の2カ所で管理されています。
また、この2つのアカウントはそれぞれ別々の用途になります。

個人開発のアカウントや、会社の代表アカウントを使う際には1つのアカウントでこの2つの役割を同時に担ってくれるため、この2つが違うということを気にしなくても良かったのです。

Objective-Cでカリー化とか部分適用してみる はてなブックマーク - Objective-Cでカリー化とか部分適用してみる

Permalink

導入

会社でHaskell勉強会に参加して、カリー化とか部分適用のパートの輪読当番になったのだが、正直、輪読時点でもそれがなんなのかよくわかっていませんでした。 しかし、勉強会で参加者のみなさまに教えてもらった結果、カリー化とかがやっと理解できました!

ということで嬉しくなって先日寝るときに布団の中で「Objective-Cでもできるかなー」と脳内コーディングしてみた結果を実装してみました。

もう他の人がやってるかもとか、こんなん実装しても実際のところ使わないよねとか、そんなことはまったく気にせずです。

実際やってみたソースコードは こちら に置いてあります。

ひとまずのゴール

カリー化して部分適用ができる状態までということで、Haskellのmapが実現できるところまでを目標にしました。

1
map (+3) [1, 2, 3]

これです。
Objective-Cでは当然、空白区切りで引数を渡していくような構文はないわけなので、関数ポインタ的なやつを使って、

1
map (+3) ([1, 2, 3])

みたいな形で()で区切り、関数の実行結果として取得した関数ポインタ(実際に関数が返すのはBlock)を使って次の引数を渡す(要するにカリー化)することでこれを実現することにしました。

しかし、Objective-Cには演算子を()で囲ってセクション化するとかないし、リストのリテラルも違うので、やるとしたらこうなります。

1
map (OP('+') (@3)) (@[@1, @2, @3])

セクションに関しては、演算子を関数化するマクロを作り、その関数に引数を1つ部分適用するイメージとします。

ということで、Objective-Cで上のmapが実現できたらはじめのゴールとしては十分かなと思いました。

iOS 7はもっさりか?比較検証してみた はてなブックマーク - iOS 7はもっさりか?比較検証してみた

Permalink

今回の記事はUIデザイナの Morino氏 からの寄稿です。

iOS 7が正式リリースされました。既にアップデートを行って実際に試されている方も多いと思いますが、今回はUIに大幅な変更が加えられたために、まだ操作に戸惑いのある方もいるのではないでしょうか。

特にiOS 7にしてから重く感じる、もっさりしているという意見もけっこう多いようです。iOS 7をしばらくいじってからiOS 6の端末を触ると、たしかにiOS 6の方がきびきび動いているように感じます。 今回は半透明やぼかし、視差効果などの画像エフェクトをふんだんに使用しているために画像処理の負荷が高いことも確かでしょう。しかし、全てが端末の性能のせいというわけでもないことを、今回はご紹介したいと思います。

頻繁に操作を行う以下の4つのシーンについて、ちょっとした比較検証を行いました。

  • ロック解除してから、ホーム画面のアイコンが全て出現するまでの時間
  • アプリアイコンをタップしてから開くまでの時間
  • フォルダをタップしてから開くまでの時間
  • ホームボタンをダブルクリックしてから、マルチタスク画面を開くまでの時間

iOS 6とiOS 7それぞれの検証結果は、以下の通りです。

※iOSシミュレータで検証を行ったため、実機とは多少違いがある点はご容赦ください。また、時間の長さも30fpsの動画で1フレームずつ進めながら自分でカウントした数値です。