タグ

iOSと開発に関するhelldeathのブックマーク (32)

  • StoreKit トランザクションの重複を防ぐ – なんてこったい

    トランザクションが複数できると面倒なことになると前回のポストで書きました。特に購入手続きの途中でアプリケーションが終了してしまったような場合は、アプリケーション側で少し面倒ですが対策をいれないと問題を回避できません。 発生するケースについての確認 実際の対策を見る前に、発生するケースについて確認しておきます。 ユーザがアプリケーション上で特定のアイテムを「購入」しようとする。 アプリケーションからStoreKitのキューにPaymentリクエストが積まれる。 トランザクションが生成される。 トランザクションが完了する前にアプリケーションが終了。 アプリケーション再起動。 前回のトランザクションが再開/完了するより前のタイミングでユーザが再び「購入」しようとする。 この問題は、前述の通りアプリケーション起動から未完状態のトランザクションが再開されるまで若干のラグがあるために発生しうる問題です

    helldeath
    helldeath 2013/04/23
    StoreKitのコールバックがアプリの再起動後に呼ばれる問題について
  • iPhone用の.xibファイルをiPad用にする « TORQUES LABS

    ある程度制作したりリリースしたiPhone専用アプリをiPad用でも使えるようにしたいことがあります。 iPhone専用アプリでもiPad上で拡大してくれるのですが、やっぱり専用にリソースを作ったり、UIを変更したいという、つまりUniversalアプリ化したいというとき、ソースコードで生成しているUIはそれなりに対応も出来るのですが、XIBファイルはどのようにすればいいのでしょうか? 今回は、XIBを変更するの手順を下記に書きました。ちょっと面倒ですが、手順を覚えてしまえば迷わずできます。 XIBの複製 まず、xibをコピーします。 [File]メニューから[Duplicate]を選び、XXX~ipad.xib の用に命名します。 【命名の話】 このxibの名前の付け方ですが、適当な名前にし、自分で呼び出す部分も変更することももちろん出来るのですが、“~ipad”とつけると、Xcodeが

    iPhone用の.xibファイルをiPad用にする « TORQUES LABS
    helldeath
    helldeath 2013/04/22
    iPad用xibビューを自動呼び出ししてくれるためのリネーム
  • iOS: In App Purchase、Restore処理のハマりポイント

    アプリ開発。Objective-C、Flash、cocos2d、Unity、Unreal Engine 4、ライブラリ、ツール類について。 先日、バージョンアップのためにSubmitしていたPuppet Camがリジェクトされてしまいました。 理由は、In App PurchaseでNon-Consumableなアイテムを購入したお客様に対して、別デバイスなどからリストアできるように、リストアボタンが用意されていないというものでした。 リストア機能は、再度、購入ボタンを押してもらえれば、2重課金にならずに済むようになってはいるのですが、お客様にとっては2重課金されないかな?と不安に思うのはもっともなので、このリジェクトは致し方無いです。 ただし同様の実装でも、リジェクトされる場合とされない場合があり、この辺りの審査はいつも微妙です。 今回は、リストアボタン実装中に、ひとつハマりポイントを見

    helldeath
    helldeath 2013/04/19
    リストアするときの注意
  • iPhoneでAES128暗号化 - Rhythm & Biology

    iPhoneアプリ開発で暗号化を行う必要が出てきたので、試しに書いてみました。 暗号方式にはAES128を、Padding方式にはPKCS7を使っています。 ここで使っているCommonCryptoはiOS SDKについてくるものですが、mac上でも普通に使うことができます(iPhone Simulator用のライブラリを無理矢理使います)。 使い方としては、下のコードをコンパイルして、 $ ./a.out aaaabbbbccccdddd eeeeffffgggghhhh messageというようにすると"message"が暗号化され、さらに続けて復号化されます。 第一引数は鍵、第二引数はInitial Vectorです。どちらも16バイトである必要があります。 /* * gcc -std=c99 crypto.m -framework Foundation */ #import <Fo

    iPhoneでAES128暗号化 - Rhythm & Biology
    helldeath
    helldeath 2013/04/19
    CCCryptを使った暗号化・復号について。ivとkeyの設定はこちらの方法が正しいようだ
  • iOS Developer Programの期限内での更新

    iOS Developer Programの更新作業をした際の覚書です。 iOS Developer Programのライセンスの有効期間は1年間となっていますので、更新する必要があります。 更新については、Program Renewals – iOS Developer Program – Support – Apple Developer.に詳しく書いてあります。 更新しなかった場合もどうなるか書いてあるので、一度は読んでおくと良いと思います。 なお、期限が切れる前に更新していますので期限が切れた後に更新した場合とは少し異なると思います。 目次 ライセンスの購入 証明書(Certificate)の更新 Provisioning Profileの更新 ライセンスの購入 iOS Dev Center – Apple Developer.にてライセンスを購入します。 更新が近づいていると、ロ

    helldeath
    helldeath 2013/04/08
    期限切れのあとこれを元に更新しました。要求作成時に公開鍵と秘密鍵が作成されるので、それは自分で勝手に削除しないこと!
  • 中級者向け iOS デバッグ Tips - jarinosuke blog

    導入 iOS 開発者のみなさん、こんにちは。 このブログでは主にチュートリアルだったりフレームワークの紹介みたいなことを書いてきました。 そこで、たまには中級者向けのエントリを書いて「Xcode バリバリ使って、ビシバシ Objective-C 書いてますよ」アピールします。 iOS 開発をはじめて一通り Framework は理解したけど Xcode 使いこなせてる感が足りない方、夢にまで EXC_BAD_ACCESS が出てくる方に参考になる記事となればと思います。 といっても Xcode はマッシブな IDE なので、4つのデバッグツールに分けて「あれ、それ知らなかった!便利じゃん!」な方法を紹介します。 ブレークポイント デバッグには切っても切れない関係ですね。アプリを実行中に指定した行で処理を中断し、そこからステップ実行で細かいデバッグを可能にしてくれます。 ショートカットキー

    中級者向け iOS デバッグ Tips - jarinosuke blog
    helldeath
    helldeath 2013/01/25
    最後のクラッシュ状態再現は有用そうだ
  • Create UIImage from pixel data problems (solved) - Sparrow Forum

    helldeath
    helldeath 2012/12/18
    画像のRAWデータ(NSData)からCGImageRefを作る方法
  • JPEGファイルのExif情報を読み書きする - 強火で進め

    ※このプログラムはiOS 4以降対応です。それ以前のOSでは正しく動作しません。 (2013/12/16 追記) iOS SDK 7だと不具合が発生しています。ご注意を!! iOS SDK 7でImageIO Frameworkを使ってExif情報にユーザコメントを書き込む時は注意が必要 - 強火で進め http://d.hatena.ne.jp/nakamura001/20131215/1387125345 (追記ここまで) Exif情報の読み書きには ImgageIO.framework を使用しますのでこちらを追加してプログラムの先頭に #import <ImageIO/ImageIO.h> を追加します。 Exif情報を書き込んだJPEGファイルを書き出す場合は以下の様にします。 - (IBAction)exifExport { NSString *imgPath = [NSStr

    JPEGファイルのExif情報を読み書きする - 強火で進め
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
    helldeath
    helldeath 2012/12/17
    これを参考にします!
  • How to write exif metadata to an image (not the camera roll, just a UIImage or JPEG)

    helldeath
    helldeath 2012/12/14
    GPSデータをEXIFに追加する具体的なコード
  • Blogger

    Google のウェブログ公開ツールを使って、テキスト、写真、動画を共有できます。

  • Exifなどのメタデータを自由に操作するにはどうするか - プログラミングノート

    Best Albumの開発でもっとも苦しめられたと言っても過言ではないのがExif操作。iOS4以降で自由にいじれるようになったとはいえ、あまりまとまった資料がなくて大変だったのでこれから作る人のために。(iOS4.2で動作確認をしています) ライブラリ ここでは下記のフレームワークを利用します。 #import <AssetsLibrary/AssetsLibrary.h> #import <ImageIO/ImageIO.h> フォトライブラリへの保存 ImagePickerControllerで撮影を行ってから保存する場合、通常の方法ではExif情報が保存されません。Exifを保存したい場合はiOS4.1から追加されたAssetsLibraryのメソッドを利用します。 まずはカメラ(or フォトライブラリ)の起動 UIImagePickerController *imgPicker

    Exifなどのメタデータを自由に操作するにはどうするか - プログラミングノート
  • UIView拡張カテゴリによるUIコーディングの簡略化 - mixi engineer blog

    はじめまして、佐野です。僕は2006年10月にメンバー4人でネイキッドテクノロジー社を創業し、5年間ガラケーからスマホに渡るまでモバイル関連の技術・サービス開発に携わり、去年の10月にミクシィ社にジョインし、現在はmixiのiPhoneアプリの開発に携わっております。このブログではiOSプログラミングの初級者~中級者向けに、さらなる上達の助けになるようなことを書いていきたいと思います。 Apple 製の iOS/Mac アプリの統合開発環境であるXCodeは、ver4 から GUI ベースの UI 開発ツールである Interface Builder が組み込まれ、非常に快適にUI開発ができるようになりました。mixi の iPhone/iPad アプリも基的には各画面が IB ファイルで構成されています。静的な画面であればこれだけで済むのですが、アニメーションを多用したインタラクティブ

    UIView拡張カテゴリによるUIコーディングの簡略化 - mixi engineer blog
    helldeath
    helldeath 2012/10/17
    これはけっこう使える
  • 第1回 mixi SDKでiPhoneアプリを作ろう | gihyo.jp

    はじめに mixiはSNSだけではなくプラットフォームとしての側面も持っており、mixiの持つソーシャルグラフをmixiの外のサービスで利用したり、mixi上でWebアプリケーションを動作させたりすることができます。前者はGraph APIと呼ばれるAPIセットで実現でき、後者はmixiアプリ向けAPIで実現できます。 mixiではスマートフォン上でのmixiプラットフォームの利用を促進するために、今年の5月に「mixi API SDK for Android⁠」⁠、9月に「mixi API SDK for iOS」の提供を開始しました。今回と次回の2回に分けて、そのiOS版SDKとAndroid版SDKについて順に紹介します。 mixi API SDK for iOSとは mixi API SDK for iOS(以下、mixi SDK(iOS)と表記)とはその名のとおりmixi API

    第1回 mixi SDKでiPhoneアプリを作ろう | gihyo.jp
    helldeath
    helldeath 2012/10/02
    SDK使うほうが簡単そうだ
  • iOSアプリ開発で例外の発生した場所を特定する | DevelopersIO

    iOSアプリを開発していて、例外が発生してアプリがクラッシュしてしまうことがしばしばあります。 Xcodeでは、クラッシュ時に得られる情報が少ないので、原因究明に時間がかかってしまいます。 そんなときは、「NSSetUncaughtExceptionHandler」を使用すると便利です。 まず、試しに、よくある例外をわざと発生させてみます。 - (void)viewDidLoad { [super viewDidLoad]; // ここで、わざと例外を発生させてみます。 [[NSArray array] objectAtIndex:0]; } 実行すると以下のようになります。 「UIApplicationMain」で止まってしまって、状況がよくわかりません。 「NSRangeException」が発生したことくらいはわかりますが、もう少し情報が欲しいところです。 そこで、「NSSetUnc

    helldeath
    helldeath 2012/10/02
    あーこれはぜひ覚えておこう。明日から使える
  • 正規表現 - KuuZooBook

    iphoneで正規表現を使う機会があったのでまとめ。 まず正規表現って何?って方はこちら objcで正規表現を使って特定の文字列を取得するには二つのアプローチがある模様。 NSStringに対してrangeOfStringを使う。 NSRegularExpressionにNSStringのオブジェクトを渡す。 NSStringに対してrangeOfStringを使う。 rangeOFStringの引数optionsにNSRegularExpressionSearchを渡してやると正規表現を使ってNSRangeを得る事ができるようになります。rangeOfStringを使って正規表現にマッチする範囲をmatchに渡し、後で使うときはmatchの範囲の文をsubstringWithRangeで得ています。 NSString *string = @"東京は寒い。カナダはもっと寒い。"; NSRa

    正規表現 - KuuZooBook
    helldeath
    helldeath 2012/08/03
    Objective-Cで正規表現にマッチした文字を取得する
  • はっそうし Core Dataで全データを素早く削除するには

    Core Dataで全データを削除する方法を検索すると、安全な方法として、一データごとに削除する方法が紹介されている。安全だろうけどこれ確実に遅いよね。Store TypeとしてSQLiteを使用している場合、ファイルを削除する方法も見つかる。削除している時に、PersistentStoreに同時アクセスが発生したら確実に落ちるよな。 楽観的な排他処理が前提ではあるが、削除処理はmain threadで行うこととすればファイル削除でのCore Dataの全データ削除が実現できる。ApplicationDelegateクラスのメソッドが前提のコードは以下になる。 - (void)deleteStore { if ([NSThread isMainThread]) { // sqliteファイルのURL取得 NSURL *storeURL = [[self applicationDocumen

    helldeath
    helldeath 2012/07/10
    該当CoreDataのsqliteファイルを削除して再生成するのが早い
  • CoreData 全レコード削除

    突然の Core Data を。 - (void)resetAllData:(NSManagedObjectContext *)context { NSUInteger count = 0; for (NSEntityDescription *entity in [[[context persistentStoreCoordinator] managedObjectModel] entities]) { NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:[NSEntityDescription entityForName:[entity name] inManagedObjectContext:context]]; NSArray *temp = [context executeFetch

    helldeath
    helldeath 2012/07/10
    全行フェッチして1レコードずつdeleteを実施
  • MKReverseGeocoderでより精度の高い住所情報はMKPlacemark.addressDictionaryにあった!

    MKReverseGeocoderでより精度の高い住所情報はMKPlacemark.addressDictionaryにあった! 先日MKReverseGeocoderの精度は決して高くなさそうだと書いたが、それは間違いだった。 琴線探査: iPhoneアプリでのより高精度な逆ジオコーディングを求めて・・・ より精度の高い住所情報は、MKPlacemark.addressDictionary.FormattedAddressLinesから取得できるとわかった。 /** * * MKPlacemark.addressDictionaryから取得するFormattedAddressLinesを * 一行の文字列として返す * */ - (NSString *)getFormattedAddressLineFromPlacemark:(MKPlacemark *)pm { //最終的な住所文字列

    helldeath
    helldeath 2012/07/05
    CLGeocoder,CLLocationで逆ジオコーディング。FormattedAddressLinesの方が詳細な情報が取得できる
  • iOS5 での地名の取得 CLGeocoder | K1278 ブログ (テスト中)

    helldeath
    helldeath 2012/07/05
    位置情報はCLLocationで