質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

3155閲覧

【Xcode】シミュレータ及び、iPadでの実機テスト時のみアプリが落ちてしまう

Ruthi

総合スコア65

iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

1クリップ

投稿2017/06/15 08:18

編集2017/06/15 23:24

いつもお世話になっております。
今回させていただく質問は、以前質問させていただいた内容の続きになります。

###はじめに
前回の質問にも記載されていますが、iOSアプリでCoreMotion.frameworkを利用して歩数計を作りました。
参考にしたサイトはこちらです。

歩数計実装当初からXcode上のシミュレータで歩数計の計測停止(歩数・時間のカウントを止める)ボタンを押すとアプリがクラッシュするという謎の現象が発生していたのですが、
実機iPhoneでは再現されない現象だったため、開発を続けていました。

ここまでが前回の質問での出来事です。

###問題点
この度アプリが完成し、Appleへ申請しようとしたところ、恐ろしい事態が発覚してしまいました。

なんと実機iPadでも上記と同様の現象が発生するのです。

このままではAppleに申請したところで、アプリがクラッシュするということでリジェクトされるのはほぼ確実だと思います。
早速修正しようと思い調べてみたのですが、有用な情報が特に得られずこちらに質問させていただいた次第です。

iPadの機種が、第4世代のものなので最初はM7が搭載されておらず使えないのかと思いましたが、
そもそもM7は歩数を計測する(モーションアクティビティ)ために使っているはずなので歩数計測ができないなら、計測開始した時点で落ちるんじゃないでしょうか?(これは前回の質問にも書いてますが…)

試しにiPhoneのモーションアクティビティ設定を無効にして試したところ、歩数計測機能だけが停止し、時間の計測は問題なく行われました。
計測を停止してもアプリがクラッシュするということは起こらず、迷宮入りの状態です。

###ソースコード
前回の質問にも記載してありますが、念のためソースコードを記載します。
前回投稿時から少々加筆した部分もありますが大元の歩数計測・時間計測についてはほぼ変わっていません。

lang

1import UIKit 2import CoreMotion 3 4class FourViewController: UIViewController { 5 6 //今回の歩数 7 @IBOutlet weak var Count: UILabel! 8 //計測開始ボタン 9 @IBOutlet weak var Start: UIButton! 10 //計測終了ボタン 11 @IBOutlet weak var Stop: UIButton! 12 //計測時間 13 @IBOutlet weak var CountTime: UILabel! 14 15 // class wide constant !! 16 let pedometer = CMPedometer() 17 18 var timer = Timer() // Timerクラス 19 var startTime: TimeInterval = 0 // Startボタンを押した時刻 20 var time : Double = 0.0 // ラベルに表示する時間 21 22 override func viewDidLoad() { 23 super.viewDidLoad() 24 25 //終了ボタン無効化 26 Stop.isEnabled = false //初期状態、または計測を開始していない時に終了ボタンを押せないようにしています 27 } 28 29 //ステータスバー非表示 30 override var prefersStatusBarHidden: Bool { 31 return true 32 } 33 34 @IBAction func CountStart(_ sender: Any) { 35 36 self.Count.text = "0歩" 37 //開始ボタン無効化 38 Start.isEnabled = false 39 //終了ボタン有効化 40 Stop.isEnabled = true 41 // Startボタンを押した時刻を保存 42 startTime = Date().timeIntervalSince1970 43 // 0.01秒おきに関数「update」を呼び出す 44 timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(self.update), userInfo: nil, repeats: true) 45 46 // CMPedometerの確認 47 if CMPedometer.isStepCountingAvailable() { 48 self.pedometer.startUpdates(from: NSDate() as Date) { 49 (data: CMPedometerData?, error) -> Void in 50 DispatchQueue.main.async(execute: { () -> Void in 51 if error == nil { 52 // 歩数 53 let steps = data!.numberOfSteps 54 self.Count.text = "\(steps)歩" 55 } 56 }) 57 } 58 } 59 } 60 61 @IBAction func CountStop(_ sender: Any) { 62 self.pedometer.stopUpdates() 63 //開始ボタン有効化 64 Start.isEnabled = true 65 //終了ボタン無効化 66 Stop.isEnabled = false 67 //タイマー処理を停止 68 timer.invalidate() 69 } 70 71 override func didReceiveMemoryWarning() { 72 super.didReceiveMemoryWarning() 73 // Dispose of any resources that can be recreated. 74 } 75 76 func update() { 77 //経過時間は以下の式で計算する 78 //(現在の時刻 - Startボタンを押した時刻) 79 time = Date().timeIntervalSince1970 - startTime 80 //時間を小数点前後で分割(小数点以下は2桁だけ取得) 81 let sec = Int(time) 82 let msec = Int((time - Double(sec)) * 100) 83 //「XX:XX.XX」形式でラベルに表示する 84 let displayStr = NSString(format: "%02d:%02d.%02d", sec/60, sec%60, msec) as String 85 CountTime.text = displayStr 86 } 87}

###開発環境
Xcode8.3.3
Swift3
にて開発しています。

このような現象について何かご存知の方がいらっしゃいましたら、お知恵をお貸しいただけると助かります。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CMPedometer.isStepCountingAvailable()

でPedometerが使えない場合はであれば

self.pedometer.stopUpdates()

これも使えないのではないでしょうか

実機iPadでも上記と同様の現象が発生する

とりあえずiPhoneのみでAppleに申請して、
iPadは後からバージョンアップで追加するとか
申請では色々な理由で却下されますので
簡単すぎる、他にも同様アプリが多数ある
も却下理由の一つです

投稿2017/06/16 00:35

aja

総合スコア3733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ruthi

2017/06/16 01:15

回答ありがとうございます。 前回質問時にも似たような点を指摘されたのに、 自分はだいぶ見当違いな想像をしてたみたいですね…(見た目上は時間計測で止まってるように見えるだけで実際は歩数計測で止まってるという) 実はこの現象に気がついたのがAppleに申請してからでして、 取り下げて修正しようかと思ったのですが質問にある通りiPadが結構古いので、 もしかすると最新に近い機種だと落ちないのかなと思い取り下げずに現在審査待ちの状態になります。 アプリの動作以前に、挙げられた類似アプリが多数ある等の理由で却下されたら真相は闇の中になってしまいますが…
aja

2017/06/16 01:41

Pedmeterが使えないときは self.pedometer.stopUpdates() を外せばいいですね Appleで却下されるときはそれなりの理由は示されます ただそれで原因がはっきりしない事がおおいので、何度も聞いた方がいいです 3回目くらいやって「えーっ!それがダメだということ!?」というのがありました
Ruthi

2017/06/16 06:36

なるほど、勉強になりました。ありがとうございます。 Appleから審査結果が届いて、却下されず通った場合はこの回答をベストアンサーとして質問を締めさせていただきます。 もし却下され、理由が質問内容のアプリクラッシュ等のものでしたら内容を編集して再度挙げようと思います。
Ruthi

2017/06/19 01:31

Appleから審査結果が届きました。 却下されず、あとは私自身の手でリリースするだけの状態になってました(手動リリース設定にしてあったので) やはりM7の有無で違いが出る(最新端末だと落ちない)ということだったのでしょうか… 先述の通りajaさんをベストアンサーとしてこの質問を締めさせていただきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問