2016年08月11日

Google AdMob SDK 7.9.1

自作アプリの新しいバージョンを開発中。アプリケーション実行時にコンソールにメッセージ出力するようになり気がついた。


<Google:HTML> You are currently using version 7.7.1 of the SDK. Please consider updating your SDK to the most recent SDK version to get the latest features and bug fixes. The latest SDK can be downloaded from http://goo.gl/iGzfsP. A full list of release notes is available at https://developers.google.com/admob/ios/rel-notes.


Google Mobile Ad SDKの新しいバージョン(v7.9.1)がリリースされたようです。

入れ替え方法は簡単。

上記サイトからファイルをダウンロードして、zipファイルを解凍。

GoogleMobileAds.framework
Mediation Adapters/
  GADMAdNetworkAdapterProtocol.h
  GADMAdNetworkConnectorProtocol.h
  GADMEnums.h
  GADMRewardBasedVideoAdNetworkAdapterProtocol.h
  GADMRewardBasedVideoAdNetworkConnectorProtocol.h
  GADMediationAdRequest.h

を古いファイルと置き換える。

これだけ。あとはビルドすればOK。
タグ:AdMob
posted by 永遠製作所 at 02:05| 東京 ☔| Comment(0) | TrackBack(0) | iPhone/iPod touch | このブログの読者になる | 更新情報をチェックする

2016年06月13日

WWDCノススメ

WWDC 2016が今週開催されます。私はもう何年も参加していないのですが、一応発表内容やセッション内容は国内においてもフォローできるので、できるだけ視聴あるいは記事を読んでキャッチアップしていきたいとは思います。

随分昔のはなしになりますが、過去に書いたWWDCをここから参照できるようにします。



WWDCのススメ ver. 2008
WWDCのススメ ver. 2009
WWDCのススメ ver. 2010
 ※これは加筆修正した村上幸雄さん名義になっています。

2010年版から私が著者名義から外れています。iPhoneが世界的にブレイクして参加者が増加するなかで、WWDCの位置づけや参加者の人数や中身がかなり大きく変化している時期なのに、私自身がこの前年に参加していなくて、その状況の変化を把握できない状態になっていました。このため、内容に責任が持てないと考え、実際に参加している村上氏にお願いし、昔から変わっていない部分は残し、不適切な部分は削除・修正し、新たに変化してきている部分や村上氏自身の考えなどを追加していただいて公開することになったためです。

私の貢献度はこの2010年度版ではなくなっていますが、一応記事を参照する人の助けになればと思いリンクを追加します。

今ではWWDCは開催前から一般のニュース媒体で報道されるほどに有名になり、わざわざオススメしなくとも参加するための競争になるような状況となったため、この記事のアップデートは終了しています。

今年も日本から多くの開発者の方々が参加しているようです。参加者の方々が意義深い一週間をすごされ、その成果が色々な形で花開くことをお祈りいたします。
タグ:WWDC
posted by 永遠製作所 at 01:10| 東京 ☀| Comment(0) | TrackBack(0) | WWDC | このブログの読者になる | 更新情報をチェックする

2016年03月24日

Swift: conformProtocol()、respondsToSelector:


Objective-Cでプロトコルに対応しているかどうかを判定するconformProtocol関数や、メソッドを持っているかどうかを調べるrespondsToSelectorのSwiftでの代替について。

ただし、Objective-Cとは違いSwiftでは静的な型の決定を行っているのでほとんどがコンパイル時に決定でき、動的に判定することはない。というかそのような使い方は避けるべきと考えられる。

ここではごく基本的なものを示す。個別の事情によりまた別の判定方法を使った方がよいことがあるので、それらはいつか実際の事例毎にまとめたい。
続きを読む
posted by 永遠製作所 at 00:47| 東京 ☀| Comment(0) | TrackBack(0) | Swift | このブログの読者になる | 更新情報をチェックする

2016年03月22日

Swift: クラスの判定


Objective-Cでクラスを判定してなんらかの処理をする場合を、Swiftで実現するのはどうするのか。例えば、isKindOfClass: とか、isMemberOfClass: とかの処理。

「if ( [object isKindOfClass:[Root class]] )」は、そのオブジェクトが、Rootクラスのインスタンスかまたはそのサブクラスのいずれかのインスタンスであれば真になる。もし、判定後にそのクラスとしてなんらかの操作を行うのであれば、キャストして代入すればよい。「Sub1 *sub = (Sub1*)object;」のようにする。

一方、そのインスタンスそのものである時だけ真にしたい場合には、「isMemberOfClass:」を使う。
続きを読む
タグ:クラス Swift
posted by 永遠製作所 at 12:12| 東京 ☀| Comment(0) | TrackBack(0) | Swift | このブログの読者になる | 更新情報をチェックする

2016年03月21日

Swift: クラス名を取得する


SwiftのクラスにはObjective-CのNSObjectにあったclassNameプロパティのようなものがないので、文字列でクラス名を取得するには工夫が必要。

Objective-Cのメソッドを使ってNSStringFromClass(String)のようにする。これを実行するにはFoundationをインポートする必要がある。
※Stringは構造体であってクラスではないが、Swiftでは構造体やクラスはタイプという上位概念で包含され様々な点で似た振る舞いをする。

ただし、独自に定義したクラスではランタイムモジュールを含めた修飾が定義したクラス名の前につくのでこれを削除する必要がある。結局、以下のようになる。

import Foundation

func className(type: AnyClass) -> String {
print("AnyClass : ", terminator:"" )
// print( NSStringFromClass(type) ) // "__lldb_expr_198.Root"
return NSStringFromClass(type).componentsSeparatedByString(".").last!
}

class Root { }
className( Root ) // "Root"


単にクラス名を出力するだけであればprint( Root.self )のようにしても"Root"という結果が得られるのだが、これはprintメソッドが内部でクラス名文字列を取り出す処理を行っているだけのようだ。文字列として取り出して使うことはできない。

インスタンスからそのクラス名を取り出すには、同様に出力だけならprint( Root() )でできる。が、ちゃんとするには先ほどのメソッドに Root().dynamicType を渡すとよい。

func className(o: AnyObject) -> String {
print("AnyObject : ", terminator:"" )
return className(o.dynamicType)
}

let root = Root()
className(root)

続きを読む
タグ:Swift クラス
posted by 永遠製作所 at 01:16| 東京 ☀| Comment(0) | TrackBack(0) | Swift | このブログの読者になる | 更新情報をチェックする