ラベル iOS の投稿を表示しています。 すべての投稿を表示
ラベル iOS の投稿を表示しています。 すべての投稿を表示

【解決しました】iOSのアプデで「アップデート準備中…」で止まったが解決した

 iOS14.8 や iOS15.0 のアップデートで起こっていた

「アップデート準備中…」で固まったまま、プログレスバーの進捗が止まる現象。

「iOS15.1」へのアプデでも、また当たり前のように発生しました!


またか・・。という事で同様の現象でお困りの方へのメモを残しておきます。


■ 対処方法

※自身の端末で動作確認した行動を記載していますが、自己責任の上、行ってください。

※当サイトは以下行動で起こったいかなる端末異常/症状への責任はおいかねます。

1. アプデ中の場合は、一度WiFiをオフにして強制キャンセルする。
  また、自動アップデートをOFFにする。(アプデキャンセルからOFFのできるかは未確認)

2. ストレージの空き容量が十分に確保
(iOS15.0からiOS15.1へは2GB程度でよいですが、もっと前のバージョンからはできるだけ多くのストレージを空けておきましょう)
 空き容量は、設定から「一般」→「iPhoneストレージ」で確認できます。
 自分は250GB以上の空きの状態で行いました。

3. 端末を再起動する(余計なアプリはすべて終了させてから行うこと!)

4. WiFiにつなぎなおす

5. WiFiの電波が強になっているか確認(WiFiアイコンの波がフルで光っている)

6. アップデートを開始(あるいは再開)

7. 30分~1時間放置!

最後は「放置!」これに限ります。

なお、私は端末でYoutube見ていて、30分ほどしたら終わっていました。


完了すると、上記スクリーンショットの最下段のように「今すぐインストール」が表示されました。

これで今すぐインストールを押すと・・、


こうなって、端末が勝手に再起動するのでしばらく待ちます。




再起動されたあとにバージョンを確認。無事アップデートされました!





「アップデートを準備中...」と出て全然「iOSバージョンアップができない」問題

きっかけは「iOS 14.8」アップデート

iOS 14.8にアップデートしようとしたところ、 「アップデートを準備中...」の表記がでて全然進まなくなりました。





さきに結論から


今回の一件で試したところ、 以下の状況で起こることがわかりました。

  • 通信状況が悪いとき
  • Appleのサーバが混み合ってるとき

自分は、
  • 電波の良いWiFiにつなぎなおし
  • Youtubeでも見ながら放置してたら
いつの間にか終わっていました。

詳細は、以下で解説します。 



一度キャンセルして端末を再起動


5分以上同じ画面でプログレスバーも全然進まないので、

一度キャンセルして端末再起動したいと思いました。

キャンセル選択は特にありませんが、WiFiを切ると強制キャンセルとなるようです。




「一時停止中」になったので、端末を再起動しました。



電波弱いWiFiアクセスポイントにつないでいた事に気づく


念の為、WiFiもつなげなおそうと、現在の設定をふとみたら、

別の部屋においているルータのWiFiにアクセスしていて、

そもそも電波アイコンが2つの状態でした。


ああ、通信状況悪かったのか・・、

と今いる部屋のルータにつなぎ直し

電波強の状況にしてリトライ。

結果変わらず

「アップデートを要求しています」から

 「アップデートしています」的なダウンロードに変わるも

結局また「アップデートを準備中...」となりプログレスバーが止まりました。


止まった位置はさっきと違います。

・・という事は。


Apple側が混んでいる

こちら側の環境がよくなっても、停止する位置が不安定ということは

iOS側(Apple側)が要因であると思われます。

iOS14.8リリース時は、Twitterのトレンドでも話題になっており、

非常に危険なセキュリティホールを埋めるアップデートだったため

世界的にも話題となっていましたので、

ダウンロードが殺到していた事も考えられます。



進まないものは仕方がない

iPhoneの空き容量も100GB以上あり、端末の問題ではなさそうという事で

Youtubeで音楽でも聞きながら仕事に戻ることにしました。



そして、一時間後

アップデート画面を確認すると・・

ダウンロードが完了しているではありませんか!(SS撮り忘れました・・)


さっそくインストール

Youtubeなど「オーディオ再生中はアップデートできません」という表示がされていたので

Youtube再生を止めてインストールを押したら、無事インストールされました。




まとめ


というわけで、

  • WiFiの電波に問題はないか→「速度計測サイト」で目安確認しましょう。
  • 端末の空き容量は問題ないか
  • 端末を再起動しても変わらないか

これでもダメなら放置して気長に待ちましょう!

【2018年9月版】WindowsのiTunesでバックアップ先を変える方法

はじめに、

自分のWindowsが 32bit か 64bit かの判断もつかないような人は、

この先ファイルを損失する可能性も否めないので、ちゃんと調べるか、今すぐ立ち去る事をオススメする。

なお、以降の手順で何が起きても自己責任となるので、そこを1つよろしく。



ここでは、使用している Windows10 が、64bitだという体で進める。


1. Windowsでシンボリックリンクが貼れるツールをインストールする。

http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#download

以下の2つを落とす。x64の方ね。インストールも順に入れる。

vcredist_x64.exe for VS2005 SP1, version 6195/June 2011 (3.0 Mb)

Link Shell Extension (3.87Mb)

2. iTunesがバックアップ先にするフォルダがあるか確認し、なければ作る

→これがマジで地雷。Appleの公式にも書いてある場所と違う。
 おそらくどこかの時期でiTunesの仕様が変わり公式に反映されていないと思われる。
 2018年9月23日時点で入れたiTunes(Windows)のバックアップ先は、
 C:\Users\<自分のユーザー名>\Apple\MobileSync
 になっている。

→隠しファイルの表示を有効にしないと見えないかもしれん。


→上記フォルダがなければ、新規フォルダで空フォルダを作る


3. バックアップしたい場所に新規フォルダを作る

4.作ったフォルダを右クリ→「リンク元として選択」をクリック

5. 手順2のMobileSync下に「Backup」フォルダがある場合、「Backup1」などにリネーム
なければ次の手順へ進む

6. なにもない場所を右クリ→「リンクを作成」→「シンボリックリンク」を選択

7. できたシンボリックリンクの名前を「Backup」もちろん半角でリネーム

iTunes からPCへ手動バックアップをしてみて、中にフォルダが出来上がれば成功。これで任意のフォルダにバックアップできるようになった。

※当然ながら「このコンピュータにバックアップ」の話で、iCloudにバックアップの話ではない。

ざっくりとiOSアプリの申請から審査開始までの日付を知る方法

以下のサイトが現在の平均審査開始までの日数を統計してて便利。

http://reviewtimes.shinydevelopment.com/


必ずこの日付ではなく、ざっくりとした数値なのであくまで目安程度にどうぞ。

ちなみに、自分が3つほど提出した際も、この日付通りか数日前に開始されたので大体あってそうです。

iPhoneアプリ開発者さんはブックマークしといて損はないと思います。

iOS で glBindTexture glGenTextures などテクスチャ系処理が 0x502 (GL_INVALID_OPERATION) を出す

今回は、UIView の init 系で処理をすると、

コンテキストが正しく認識されず、 OpenGL がちゃんと初期化されていない事で起こっていた。

なぜか gl****Texture 系のみで、他の設定系はエラーが出ていなかったので迷ってしまった。

これが原因で、glDraw 系は EXC_BAD_ACCESS で止まる。

結論として、layoutSubviews の中で OpenGL を初期化するようにしたら直った。

cast of indirect pointer to an Objective-C pointer

iOS7 対応しようとビルドしてみたらこんなエラーが出たのでメモ。

[Before]
NSData *data = NULL;
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)attrDictionary, (CFTypeRef*)&data);
// (CFTypeRef*) のキャストの所で cast of indirect 〜 が出てビルド通らず


[After]

CFTypeRef cfref = NULL;
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)attrDictionary, &cfref);
NSData *data = (__bridge id)cfref;
// 一度定義した CFTypeRef を渡した後ブリッジキャストで解決

Could not change executable permissions on the application が出る理由

同バンドル名で既に端末にインストールされているものがあるのが原因。

該当するアプリを削除してから再度実行すれば通る。


Flash CS6のスプライトシート書き出し後 C/C++用UVテーブルを作成する

Flash CS6 でスプライトシートを書き出すという便利な機能があるが、

各スプライトのUVがXMLで吐き出されるため

スプライトシートを作ったはいいけど、iOSのOpenGLで使う時など

C/C++ でも使える形式に変換するものがないので Python で簡易スクリプトを書いてみた。

動作確認は Python2.7.2 Windows7 。 バッチ処理は Windows 向けだが

Python スクリプト自体は他の環境でも動くと思われる。

まずは以下の Python スクリプトをコピペして保存。

=====[ convert.py ]=====
# -*- coding: utf-8 -*-
import codecs
import sys, re

sys.stdout = codecs.lookup('utf-8')[-1](sys.stdout)

print u"open file.\n"

inname = sys.argv[1]
trimname= inname.split('\\')[-1].split('.xml')[0]

f = codecs.open (inname, 'r', 'utf-16')

data = f.read ()

print u"file size: " + unicode (len (data)) + u" byte(s).\n"

#print data

f.close ()

print u"replace text.\n"

xlist = re.findall (r'x="([0-9]+)"', data)
ylist = re.findall (r'y="([0-9]+)"', data)
wlist = re.findall (r'width="([0-9]+)"', data)
hlist = re.findall (r'height="([0-9]+)"', data)
nlist = re.findall (r'name="([a-zA-Z0-9_]+)"', data)

out = u"typedef struct{ int x, y, w, h } ssuv;\n\n"

if len (xlist) == len (ylist) and len (xlist) == len (wlist) and len (xlist) == len (hlist) and len (xlist) == len (nlist):

 i = 0
 
 out += u"enum {\n"
 
 for x in xlist: 
  
  print nlist[i]

  out += u"\t%(name)s,\n" % {'name' : nlist[i][:-4] }
  
  i += 1
 
 out += u"};\n\n"
 
 i = 0
 
 out += u"ssuv %(valuename)s_tex[] = {\n" % {'valuename':trimname}
 
 for x in xlist:
 
  out += u"\t{%(X)d, %(Y)d, %(W)d, %(H)d},\n" % { 'X':int (xlist[i]), 'Y':int (ylist[i]), 'W':int (wlist[i]), 'H':int (hlist[i])}
 
  i += 1

out += u"};\n"

print u"output file."

f = open (trimname + "_out.txt", 'w')

f.write (out)

f.close ()
========================

あとは引数に xml のファイルパスを渡してやれば

ファイル名_out.txt というファイルで enum とテーブルに変換したものを吐き出す。

適当にバッチ化してやると楽かも。

例えば、Windows ならさらに以下の様なバッチファイルを作成する。

=====[ convert.bat ]=====

echo off
python convert.py %1
pause

=========================

以後、このバッチに処理したい xml をドラッグするだけでコンバートされる。

ちなみに enum で定義される名前は、

シンボル名をそのまま使うのでシンボル名に全角を使わないような工夫が必要です。






親ビューから子ビューの範囲にあるタッチイベントを処理したい時

親から子の範囲にあるタッチイベントを処理したいという時は、

子にも親で処理したいイベントを実装する。( touchesBegan など )

その中に以下のコードを入れる。

[self.superview /*EventMethod*/:touches withEvent:event];

/*EventMethod*/ には、touchesBegan、touchesMoved、touchesEnded など

そのイベントを記述。

こうすることで、このイベントを親に丸投げできる。

error: failed to attach to process ID ... が出たら

突然、上記エラーでシミュレータが起動しなくなり、

clean しても 再起動しても直らなくて困る。

最終的に、iPhone シミュレータの「コンテンツと設定をリセット...」で

設定周りをリセットしたら動くようになったのでメモ。



[ 追記 ]

再度発生&解決。

StackOverflow にも同様の現象で困ってる人がいたが、

サイトのアドバイス通りに、

「LLDB」から「GDB」に一度設定を変更し一度シミュレータで「実行」させる。

その後、また設定を「LLDB」に戻すと直った。

PCH file built from a different branch

Xcode をアップデートしたら今までエラーが出ていなかったプロジェクトで発生。

Clean すれば難なく解決した。

Assigning retained object to weak variable; object will be released after assignment.

すぐに解放されるから代入する意味が無い的な事っぽい。

ゴリ押しでいいなら、ローカル変数に一度代入したものを入れると警告はなくなる。

// ここで警告が出る
yourWarningValue = [[YourClass alloc] init];

// ↓こうすると警告は消える

YourClass* newvalue = [[YourClass alloc] init];
yourWarningValue = newvalue;

no visible @interface for declares the selector

引数の数が違わないか確認する。

例えば、引数が1つ必要なのに引数なしでコールしたりすると出る。

The executable was signed with invalid entitlements.

ProvisioningFile を再作成すれば直る。

設定云々より古くなった ProvisioningFile の整合が疑わしかったので

最初から素直に作りなおしておけばよかった…。

iOSアプリ開発をする時にやっておきたい例外対応

main.m のmain関数を以下のようにしてから開発を始めると、

例外時にコールスタックをざっくり見られるので何かとデバッグが捗る。

突然 SIG_ABRT するも、どこで止まったかわからないみたいな事で迷う事も減る。

( iOS6で動作確認 )
int main(int argc, char *argv[]) {

#ifdef DEBUG

 int ret;

 @autoreleasepool {

  @try {
  
   ret = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  
  }

  @catch (NSException *exception) {

   NSLog( @"%@", [exception callStackSymbols] );
   @throw exception;
  
  }

 }

 return ret;

#else

 @autoreleasepool {

  return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

 }

#endif

}

OpenGLES2.0 のあれこれメモ

iOS6のiPhone4で確認しているので、iPhone4をミニマムスペックとしている人用のメモです。

iPhone4より性能がいい端末は、ここまで気を遣わなくてもいいはず‥。

・InstrumentsでOpenGL解析を使用して毎フレーム警告がでる部分は
解消すればそれなりに処理時間も改善されている模様。

・Mipmapは1.1同様、2の累乗サイズでしか作成できない。
必要ないならデフォルトで有効になっているので、テクスチャフィルタの設定で無効にする。
Mipmapを使わなければ、OpenGLES2からテクスチャサイズの2の累乗制限を受けないで自由度が増す。

・サイズの大きい画像は圧縮テクスチャにしてから使った方が何かといいみたい。

・でもベタ絵は苦手で圧縮テクスチャにすると劣化がわかりやすくなる事が多かった。写真系はOK。

・作成できる最大テクスチャサイズは、GL_MAX_TEXTURE_SIZEで取得できるがそのまま使用しない事。
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize);のように関数経由で取得してから
その変数を使用する。

・glGet系はできるだけ呼ばないように心がける。
例えば、上記の最大テクスチャサイズを毎フレーム調べるような処理はせず初期化時一回で済ませる。

・頂点シェーダもフラグメントシェーダも最終的に変数はfloatで扱う。
色情報をGL_UNSIGNED_BYTEで転送した場合は、
そのattribute変数の各種RGBAを255.0で割った値を最終的にシェーダに渡す。

・フラグメントシェーダはいるのか?ってくらいシンプルなものを心がける。
iPhone4 では、条件分岐だけでも使い方を工夫しないと重くなりやすい模様。
頂点シェーダで計算できるものは全部頂点シェーダで計算し、
varying経由で結果をフラグメントシェーダに渡して参照させるだけにした方が良い。

・attributeは頂点シェーダのみに渡せる変数
varyingは頂点シェーダからフラグメントシェーダに渡せる変数と覚える。
uniformは頂点シェーダ、フラグメントシェーダ両方に渡せる変数

・80ピクセル平方のスプライトをFPS60を切るまで画面中に散乱させたら
250枚前後しか出せず落胆。が、32ピクセルだと1200枚を超えたのでタイルサイズの考慮が大事?

[追記]
ブレンディングをしないと80ピクセルも1200近く出た。

円の描画も円のテクスチャではなく、円型ポリゴンをブレンドかけずに出したほうが早いかも?

OpenGLES2.0は、1.1より気難しくて意外と苦労しますね…。

NSObjCRuntime.hでerror: expected unqualified-id のようなエラーがたくさん出る

c や cpp でコーディングしていて、NSObjCRuntime.hでerror: expected unqualified-id のようなエラーが

たくさん出た時は、c/cpp/h/hpp などから obj-c を使っているヘッダをインクルードしているのが原因。

c や cpp を m、mm にリネームするか、なんとか objc を使用しているファイルを

インクルードしないでもいいような形に変えてやるとひとまずおさまる。

Admobの振込失敗時は来月再試行される模様

Admobから月頭に一定額貯まったからPaypalに振り込むよーとメールが来た。

しかしそれから一週間待てど、二週間待てど全然振り込まれない…。

某掲示板によれば実際に振り込まれるのは、20日後とか月末になるらしい。

そもそもPaypalをプレミアムアカウントにしていなかった事をすっかり忘れていて、

Paypalへ20日直前になってアカウントをプレミアムに変更する申請を行った。

が、当然間に合わず、振込処理が行われる日はパーソナルアカウントのままだった。

それが原因かAdmobからPaypalに拒否されてしまったよと

21日に以下のメールが届く

==============================
Dear AdMob Publisher,

Your PayPal payment for AdMob earnings was returned to us status "Denied."
We apologize for any inconvenience, and will reattempt payment in our
September payment cycle. We are working with PayPal to determine the
cause of this issue.
==============================

来月もう一回振込を試みるよって事みたいなのでひとまず安心ですが、

Admobを使う方はひとまずPaypalのプレミアムアカウントを

取得orアップグレードしておいた方が無難だと思われます。

※プレミアムにしたからといって料金が別途かかるみたいな事は今の所ないようです。

=====[ 追記 ]=====

翌月、しっかりと振り込まれました。

(この時は15日に振り込まれてました。)

webkiterrordomain error 101

パラメータのURLがどこかおかしいと発生するみたい。

自分の場合、http://をhttp//とコロン抜けで渡していた時に発生した。

ChromeでiPhoneサイトを見る方法

1.見たいページを普通に開く

2.Ctrl+Shift+iを押し「開発コンソール」を開く

3.右下の歯車マークを押し設定画面を出す

4.「Network」の項目にある「Override UserAgent」をチェック

5.リストから「iPhone4」または「iPhone5」を選択

6.リロード