ついんむーん

iOS開発 / 主婦で産休中 /

iOS9以降の言語コードは 言語 * 地域 で変わる

アプリでは言語に合わせて出し訳をすることができますが、

iOS9からは8と取得される言語コードが違うようです

そもそも言語コードって??

簡単にいえば言語を判別できる文字列

例えば日本語

  • ja

韓国語

  • ko

などです

基本的には形式はきまっていて

ISO 639 - Wikipedia

とかを一般的につかうのですが、

iOS9はさらっと無視します。笑

{言語}-{エリア}になった

設定>一般>言語と地域から

それぞれ変更して試してみましょう!!

例えば日本語で地域を日本にすると

「ja-jp」

になるんですよ!!

ちなみに中国語(簡体字)だと

zh-Hans-CN

となります。ながすぎ..

ISO 15924 - Wikipedia

これに準じてるのですかね、たぶん

NSURLConnectionでonSuccessに来るけどデータが受け取れなくてハマった話

この間

アプリがサーバに渡すデータをjsonで作成し、サーバに通信するとonSucceed(通信成功)するけど

サーバから受け取ったjsonが不正だというエラーがでていた

ちょうどiOS9ビルドに切り替えたタイミングだったのでアプリ側にミスがあるだろうと思っていた

具体的にはこんな感じ(超うろ覚え)

- (void) sendMethod {
    [myClass send:url
                    data:json
         onSuccess:onSuccess
            onFailure:onFailure];
}

- (void) onSuccess:(id) data {
     if ( !data ){
           NSLog(@"データなし");
     }  
}

調べた方法は下記

  • 送信しているjsonの型は正しいのか?(jsonチェッカーなどで調査)

    • 問題なし
  • 送信しているjsonに入れているデータは仕様書で使用してはいけない文字を使っていないか?

    • 問題なし
  • (サーバが2台あるので)リリース向けサーバとテスト向けサーバで同様の事象が起こっていないか

    • リリース向けサーバのみで起こっていた
  • サーバにアクセスが行っているか

    • 来ていた
  • 受け取ったjsonのfremworkが古すぎるのか?

    • 古かった。入れ替えてもいいが最後の手段にした
  • ATS対応漏れをを疑った

    • 正常
  • iOS8ビルドに戻した

    • できない

あれ、とここで気づいた

今まで動いていたはずの物が今は動いていない

しかもコードに変更は入れていない

やっとここでサーバに問題があることに気づいた

よくよく考えたらサーバが500エラーを返していた。

そういえばonSuccessってエラーを返してもonSuccessに入るんだった。。。

これって切り分ける方法ってないんですかね。。

Objective-cのクラスの概念

objective-cを書いていて1年くらい経ちますが...

未だにクラスメソッドインスタンスメソッドの使い分けに自信が無いです。

クラスを更に考える(1/8):初心者のためのObjective-Cプログラミング入門

クラスメソッド

  •  + (void) classMethod;
  •  - (void) instanceMethod; てきな感じて、+,-でかき分けています。

何が違うのかっていうと クラスメソッドはallocしなくてもメソッドを呼ぶことができるんです。

っていうことはメソッドを呼ぶ時に

TestClass *tClass = [TestClass alloc] init];

[tClass testMethod];

ではなく

[TestClass testMethod];

で呼べるのです。

だったら全部クラスメソッドでいいじゃん(初心者的思考)

しかし、制約があります

リンク先にもあるよう、原則クラスメソッドだけで完結するようなものでなければいけないのです。

クラスから直接インスタンスメソッドを呼び出すこともできません。つまりクラスメソッドは、クラスメソッドだけで完結するような形で作成されることになります。そう考えると、用途はだいぶ限定されると言っていいでしょう。

つまり

+ (void) classMethod {
    [self instanceMethod];
}

- (void) instanceMethod {
    ...

}

というような使い方はできないのですね。

使いどころをまだまだ極められませんが。。。

これからも勉強を続けます!!

the application you have selected does not exist

iOSって申請するときって

- XcodeのArchiveを選択

- Organizerが現れる

- validateを選択し、Apple側でチェック

- submitボタンを押す

- Appleにバイナリを提出するまで待つ

って感じなんだけど。

 

今日一度Appleに提出したバイナリを却下し、再申請をしました。

諸事情でprovisioningも更新。

その時にsubmit時に初めてこのエラーが出たので困惑しました。

"the application you have selected does not exist"

 

調べてみたらこんな記事と出会いました。

 

stackoverflow.com

記事によると

Xcodeは自動的にプロビジョニングプロファイル管理します。
・これは、すでに存在していたアプリの更新でした。

・Xcode6

 

同じだ

 

あ、もしかして再提出の時はエラーを吐いてるっぽい

理由はiTCのバグ。

 

解決方法としては、

- submitではなくexportする

- AppStore用に書き出す

- Application Loaderを使って提出する

これで無事申請することができました。

 

もしかしたらXcode7ではこの事象は無いのですかね

 

さっさとXcode7にしたい