忍者ブログ
[1] [2] [3] [4] [5] [6
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


先日リリースしたアプリを多言語化してアップデートした。
9ヶ国語を追加し、元々会った日本語、英語を含め11ヶ国語対応のアプリへ!

言語対応しておいたほうがダウンロードも、利用も増える可能性は高いことは聞いたこともあるし、当然そうだと思う。事実、自分も日本語対応してあるものを優先して使う傾向がある。

この結果、利用が伸びたりするのであれば、今まで作ってきたアプリも多言語化してもいいのかもしれない。その場合、もっと突っ込んでたまに考えるandroid対応も本気で考えてもいいのかもしれない。

拍手[1回]

PR

また、前回の更新から結構間が空いてしまった。
AppleWathを買っていたのだが、それすら書いていなかった。

6月末くらいにAppleWatchを購入し、しばらくの間、どんなものなのか使ってみた。
その時から、アプリを作ることを前提に購入し使用していたので、使った感想がちょっと違う視点になっているかも。

とりあえず、対応アプリにどのようなものがあるのか調べたが、自分が使っているものはほぼ無し。
この為に新たなアプリを使って見る気もなかったので、ほぼ、標準アプリしか使っていなかった。
そして、すでにでている情報から、アプリ作成時に使用できそうな機能の使い勝手を見ていた感じになる。
当然、できることが限られすぎているので予想以上の不自由さにちょっと惑ってしまう。
それも、watchOS2である程度解消されることがわかっているが、まだ、そこは試していなかった。
バージョンアップ前に、最初のアプリを出したかったので、限られた機能と使い勝手からアプリのアイディアを考えていた。

このように進めていたので、当然、新規アプリを作ることが難しいと思った。
購入前に考えていたアイディアは、現状実現できないことばかり。
watchOS2でできるのではないかと思っている。
その結果、すでにリリース済みのアプリの中でAppleWatch対応に向いていそうなものがないかを考えた。
その結果、MarkingMap/MarkingMapPlusが最も対応した時のイメージがつきやすかったので対応を決定。
7月の後半から着手した。

結果的には、この対応がなかなかハードルが高く、いくつも引っかかってしまった。
それについては、また、次の機会に少しづつ書いていこうと思っている。

約2週間近くかかり対応が完成し、8月1日にAppleWatch対応版がリリースできた。

そこから、10日ほど経ったので、どのくらいの変化があったのか、改めて、詳細を見てみた。
まだ、AppleWatchを持っている人は少ないので、難しいと思ってはいたのだが、ほぼ変わらずの状況だった。
残念ながら、AppleWatchへのインストール状況は、わからないようなので、純粋なダウンロード数の変化で判断するしかなかった。
(これを知る方法があるのであれば、誰か教えていただきたい)
フリー版は、ほぼ変化はなく、無理やり考えると、いつもよりも1〜2割ほどダウンロードが多いようにも見えないことはない。
しかし、このくらいの変化は、常に繰り返すている範囲なので、微妙だと思った。
有償版は、いつもはほとんどダウンロードされることはないのだが、リリース後の3日くらいで、複数のダウンロードがあった。
こんなに短期間に複数のダウンロードがあったのは初めてで、、今回の影響かもしれない。
しかも、全て北米だったので、最もAppleWatch対応の影響を反映してくれそうな地区ではある。
今のところは、この程度の変化しか見ることはできないが、予想どうりではあるので、まぁ、よしとする。

次のアプリは、watchOS2にして、バージョンアップ直後のリリースを狙ってみるのもいいと考え中。

拍手[1回]


久々にアプリ開発に関する記事を書こうと思う。
内容的にはいつもと同じで検索すれば出てくる内容だが、自分なりにまとめるためにも書いておく。

機能としては、先日リリースしたアプリに入れた機能で、SNSへの投稿を直接行う機能。
思ったよりも簡単だった。
ちなみに、未だにObjective-Cを使用している。

まずは、「Social.framework 」を追加する。
その後、利用するファイルのヘッダに下記のインポートを追加する。

#import <Social/Social.h>

さらに、ソース部分の実際の投稿処理を追加する。
この時に、Facebookとtwitterの両方に対応を行うようにしたため、その判断も一緒に入れた。

    NSString *serviceType;

    if (type == POSTING_FACEBOOK) {
        serviceType = SLServiceTypeFacebook;
    }else{
        serviceType = SLServiceTypeTwitter;
    }

    if ([SLComposeViewController isAvailableForServiceType:serviceType]) {
        SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:serviceType];
        
        [controller setCompletionHandler:^(SLComposeViewControllerResult result) {
            if (result == SLComposeViewControllerResultDone) {
                // 投稿画面が閉じるのを待ってから、アラート表示を行う
                [NSThread sleepForTimeInterval:0.5];
                
                dispatch_async(dispatch_get_main_queue(), ^{
                    //投稿成功時の処理
                    NSString *message;
                    if (type == POSTING_FACEBOOK) {
                        message = @"facebookに投稿しました";
                    }else{
                        message = @"twitterに投稿しました";
                    }
                    id alertView = [ScreenStatusChk uialertViewInit:@""
                                                      massageString:message
                                                       cancelString:@"OK"
                                                         controller:nil];
                    [ScreenStatusChk uialertViewOpen:alertView controller:self];
                });
            }
        }];
        
        //保存する画像を取得
        [self getImageData:&image];
        NSString *string = [NSString stringWithFormat:@"追加イメージ"];
        [controller setInitialText:string];
        [controller addImage:image];
        
        [self presentViewController:controller
                           animated:NO
                         completion:NULL];
    }

実際には、 投稿ボタンを押した時に動作するようにし、「type」に、Facebookとtwitterの種別が入力されるようにしてある。

これだけで、動作上は問題なく投稿する事ができる。

ただし、これだけだと、ネットワークに繋がっていなくても投稿できたように見える。
そのため、さらにネットワークが使えるのかの確認を行うようにする。
そのために、「Reachability」という公式のライブラリを使用した。

まずは下記のサンプルをダウンロードする。

Reachability – iOS Developer Library

この中に入っている、下記の2ファイルを利用したいプロジェクトにコピーする。
・Reachability.h
・Reachability.m
さらに、「SystemConfiguration.framework 」を追加する。

先ほどと同じように、利用するファイルのヘッダに下記のインポートを追加する。

#import "Reachability.h"
そして、先ほどのソースの前に、下記のソースを追加して、投稿処理の前に、それぞれのサーバーとの接続状態のチェックを行う。
当然、接続できない場合には、投稿処理を行わずに、エラーメッセージを表示して、終了させた。
    if (type == POSTING_FACEBOOK) {
        reachability = [Reachability reachabilityWithHostName:@"www.facebook.com"];
    }else{
        reachability = [Reachability reachabilityWithHostName:@"twitter.com"];
    }
    
    NetworkStatus status = [reachability currentReachabilityStatus];
    if (status == ReachableViaWiFi) {
        // wifi接続時
    } else if (status == ReachableViaWWAN) {
        // 3G接続時
    } else if (status == NotReachable) {
        // 接続不可
        id alertView = [ScreenStatusChk uialertViewInit:@"接続エラー"
                                          massageString:@"電波状況の良いところでやり直してください"
                                           cancelString:@"OK"
                                             controller:nil];
        [ScreenStatusChk uialertViewOpen:alertView controller:self];
        
        return;
    }

これだけの処理の追加で、投稿処理自体はどうさした。

予想以上に簡単にできたので、あると便利と思ったアプリに同じものをコピーして入れていった。

拍手[0回]


iPhone6/6plusの対応を現在進めている。

対策内容としては比較的単純で、下記の内容を行い確認していった。
・storyboardでの位置の指定を変更
・サイズを画面サイズに合わせて可変に変更
・コードで直接アドレスを指定している箇所を、画面サイズから計算して指定するように変更

基本的にこれで対応可能で、必要に応じて、画像の追加も行う形で進めていた。
しかし、これだけでは対応できないケースが出てきてしまった。

タイトルにも書いているように、Landscapeの画面を混ぜているアプリで上手く動かなかった。

自分のアプリは、広告表示のために基本Portrait表示固定にしている。
その中で、「ゆびてんじ」だけは例外的にLandsapeの指定が可能にしている。
これは、アプリの性質上、横向きでないと使いにくくなってしまうために行った。
ここで、上手く動かない場合があった。
使っていただいた方はわかると思うが、途中でPortrait→ Landscape→ Portraitと変更される。

ここで、次のような現象が発生した。
Landscape→ Portraitになるところで、画像を生成するのだが、生成される画像が崩れてしまう。
原因は、画像を生成するUIViewControllerへ移った時、前の状態が残ってしまっていた。
つまり、最終的に表示させる時には、Portraitなのだが、画像生成の途中まで、Landsapeとなっていた。
このため、生成する画像の位置がずれてしまい、最終的な画像が崩れてしまった。

対策をいろいろと試したのだが、途中で、画像の生成の途中で向きが変わってしまうので単純にはできなかった。
結果的に、画面の向きが変わってから画像生成を行うように対策。
画像生成前に、表示中の画面向きを判定し、Landscapeの時にはタイマを設定して、待つことにした。
タイムアウトで再度、画面向きの判定を行い、Portraitになっていた時に実際の画像生成処理を実行。
向きが変更されるまでひたすらタイマを繰り返して待つというなんとも格好の悪い対応をしてしまった。

すでに申請を行って、審査待ちと成っているのだが、よく考えたら、向きの変更のイベントを受け取ることができたような気がしてきた。
今更取り下げて、修正する気にもなれないので、今回はこのままにするが、機会があれば、もう少しすっきりした形に修正したい。

拍手[0回]


現在、iOS8対応などを進めているが、このタイミングで広告のSDKのアップデート分を反映させてみた。
最近、新たなアプリのリリースができていなかったこともあり、随分とバージョンが変わっていたようだ。
この結果、色々と変わったところが出てきた。

一番大きなこととして、「arm64」を入れても問題なくなった。
おそらく、随分前から大丈夫だったのだと思うのだが、ここの検証を怠っていたため、今頃気がついた。

さらに、追加が必要なframeworkが増えていた。
エラーの内容から比較的直ぐに何が追加が必要であるのかがわかったので良かった。

今回追加したものは、以下。
・ImageIO.framework
・EventKit.framework
・EventKitUI.framework
・AVFoundation.framework
・CoreTelephony.framework

ちなみにこんなエラーが出ていたものが取れる。

========================================================================
"_AVAudioSessionPortBuiltInSpeaker", referenced from:
-[GADDevice audioRouteUsingAVAudioSession] in libGoogleAdMobAds.a(GADDevice.o)
"_AVAudioSessionPortHeadphones", referenced from:
-[GADDevice audioRouteUsingAVAudioSession] in libGoogleAdMobAds.a(GADDevice.o)
"_CGImageSourceCopyPropertiesAtIndex", referenced from:
+[NADUtils animatedGIFWithData:] in libNendAd.a(NADUtils.o)
"_CGImageSourceCreateImageAtIndex", referenced from:
+[NADUtils animatedGIFWithData:] in libNendAd.a(NADUtils.o)
"_CGImageSourceCreateWithData", referenced from:
+[NADUtils animatedGIFWithData:] in libNendAd.a(NADUtils.o)
"_CGImageSourceGetCount", referenced from:
+[NADUtils animatedGIFWithData:] in libNendAd.a(NADUtils.o)
"_CTRadioAccessTechnologyDidChangeNotification", referenced from:
-[GADDevice enableRadioAccessTechnologyChecking] in libGoogleAdMobAds.a(GADDevice.o)
"_OBJC_CLASS_$_AVAudioSession", referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADDevice.o)
"_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADDevice.o)
"_OBJC_CLASS_$_EKEvent", referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADOpener.o)
"_OBJC_CLASS_$_EKEventEditViewController", referenced from:
objc-class-ref in libGoogleAdMobAds.a(GADOpener.o)
"_kCGImagePropertyGIFDelayTime", referenced from:
+[NADUtils animatedGIFWithData:] in libNendAd.a(NADUtils.o)
"_kCGImagePropertyGIFDictionary", referenced from:
+[NADUtils animatedGIFWithData:] in libNendAd.a(NADUtils.o)
"_kCGImagePropertyGIFUnclampedDelayTime", referenced from:
+[NADUtils animatedGIFWithData:] in libNendAd.a(NADUtils.o)
========================================================================

参考になれば何より。

拍手[0回]


リリース済みアプリ

Silmuvide


PseudoRPT


うつすと!


ChronologyMaker


LASI


3行日記


単位計算機


Marking Map Plus


交通費管理


交通費計算リスト


Markin Map


SheepSleepSheep


RootCalculator


元号変換


PieChart


MeasureShooting


SimpleMapCreator



Applivのレビュー記事
http://app-liv.jp/713163900/

ゆびてんじ


PR



Copyright ©   marble seijin の開発日記   All Rights Reserved
Design by MMIT simple_plain Powered by NINJA TOOLS
忍者ブログ [PR]