20210128のiOSに関する記事は6件です。

UIScrollViewが慣性スクロール中かどうか知る

概要

UIScrollViewがスクロール中かどうかを知りたかったので、方法を調べた。

環境

  • iPadOS14.2
  • iOS14
  • swift

結果

ペンシルのことを考慮しない場合は

UIScrollView.isDecelerating

というプロパティが生えているので、これを使うことができる。
※詳しく調査していないが、以前はこれだけだと問題があったようだが、現時点(iOS14)では(ほぼ)これでうまくいく

ただ、慣性スクロールを指で止めた場合は問題ないが、ペンシルで止めた場合、isDeceleratingがtrueになりっぱなしで困った。

調査の結果、以下のようなワークアラウンドで回避できた。

extension UIScrollView  {
    // こんな処理を用意してあげて
    func stopDecelerating() {
        let contentOffset = self.contentOffset
        self.setContentOffset(contentOffset, animated: false)
    }
}

// 対象のUIScrollViewのtouchesShouldBeginなどをオーバーライドして、
// ペンシルの場合は、明示的にスクロールを止める
class HogeView: UIScrollView {

    override public func touchesShouldBegin(
        _ touches: Set<UITouch>, with event: UIEvent?, in view: UIView
    ) -> Bool {

        if isDecelerating && touches.contains(where: { $0.type == .pencil }) {
            stopDecelerating()
        }
    }
}

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Iphone カレンダーにスパムが表示&通知される対処法

iPhoneのカレンダーにスパムが表示&通知される。

その対処法を記載します。

■内容
・カレンダーに下記のようなスパムの表示&通知が表示される
 →ウィルスに感染しているかもしれません。
 →すぐに対処してください!

・消そうと思ってもその予定/スケジュールは消せない
 →さらには過去のは消えて、新しい予定が毎日追加される。

■対処法
iPhoneの設定から

設定 > カレンダー > アカウント 

アカウント内に登録してあれば、iCloud,Gmail,Yahoo!メール,ドコモメール,メッセージR/Sがありますが、
それ以外に 「Calendar Subscription」 など自身の知らないアカウントがあれば消してください。

以上

■原因
・フィッシングサイト、アダルトサイトなどでのポップアップで、「キャンセル」 を押さずに 「OK」 を押してしまった場合。
・調べた所Avgleなどのサイトでポップアップが頻繁に表示されるようです。

■備考
他のサイトで下記の対処法が記載ありますが、PCには表示されず、携帯だけ表示されるなど、
iCloudと連携していないこともあるようですので、スパムアカウントを消すことが優先だと思われます。 

 iPhoneでiCloudのカレンダー同期をオフにする
 iPhoneで「設定」>「iCloud」> 「カレンダー」をオフにし、「iPhoneから削除」をタップ

以上

〜〜〜

FX取引ならこちら!! 世界最高水準 ~ Axiory FX ~
https://portal.axiory.com/registration/?ib=19521

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【iOS】AppStoreアプリ申請 Reject(リジェクト)された話【Metadata Rejected】

はじめに

今回Flutterで開発し、すでにGoogle Playでリリースした情報処理試験問題集アプリをAppStoreでもリリース申請をした所
リジェクトされてしまったので、その対処法を記載していきたいと思います。

Apple様からのRejectメール

Your app subtitle to be displayed on the App Store include references to the price of your app or the service it provides, which is not considered a part of these metadata items.

  • 無料の情報処理試験問題集アプリ

Next Steps

To resolve this issue, please remove any references to pricing from your app’s subtitle, including any references to your app or service being free or discounted. If you would like to advertise changes to your app’s price, consider including this information in the app description. Changes to your app’s price can be made in the Pricing and Availability section of App Store Connect.

Resources

For information on how to revise your app name, please review Renaming a Project or App.

For resources on metadata best practices, you may want to review the App Store Product Page information available on the Apple Developer website.

For information on scheduling price tier changes, please review the Schedule price changes section of App Store Connect Developer Help.

Since your App Store Connect status is Metadata Rejected, we do NOT require a new binary. To revise the metadata, visit App Store Connect to select your app and revise the desired metadata values. Once you’ve completed all changes, reply to this message in Resolution Center and we will continue the review.

朝起きてメールチェックしたら上記のようなメールが届いていました。
その後App Store Connectに移動してアプリの状況を見てみると下記のような感じになってます。スクリーンショット 2021-01-28 11.03.16.png

リジェクト指摘内容

Your app subtitle to be displayed on the App Store include references to the price of your app or the service it provides, which is not considered a part of these metadata items.

  • 無料の情報処理試験問題集アプリ

どうやらサブタイトルにアプリの価格に関する言及がされていた所が問題になったようです。
今回はサブタイトルだけ修正したら、再度レビューをしてくれるようですね。

修正後の手順について

調べてみるとリジェクトの内容にはバイナリ却下とメタデータ却下があるようで、バイナリ却下の場合、再度ipaファイル等上げ直さないといけないようです。

Since your App Store Connect status is Metadata Rejected, we do NOT require a new binary. To revise the metadata, visit App Store Connect to select your app and revise the desired metadata values. Once you’ve completed all changes, reply to this message in Resolution Center and we will continue the review.

今回私が却下されたのは、上記の通りメタデータリジェクトだったので、上げ直す必要はないようです。
また、変更が完了したらメールで変更完了の旨お伝えすれば審査を再開してくれるとのことで再審査に提出ボタンを押す必要はないみたいですね!

おわりに

Android版でGoogle Playにリリースした時は申請してから2〜3日でステータスが審査完了に変わってました。
iOSのほうが審査がいくらか厳しいとは聞いていましたが、前日の夕方に申請してから翌日朝には修正依頼のメールが来るスピード感はすごいなと思いました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【iOS】AppStoreアプリ申請したらReject(リジェクト)された話【Metadata Rejected】

はじめに

今回Flutterで開発し、すでにGoogle Playでリリースした情報処理試験問題集アプリをAppStoreでもリリース申請をした所
リジェクトされてしまったので、その対処法を記載していきたいと思います。

Apple様からのRejectメール

Your app subtitle to be displayed on the App Store include references to the price of your app or the service it provides, which is not considered a part of these metadata items.

  • 無料の情報処理試験問題集アプリ

Next Steps

To resolve this issue, please remove any references to pricing from your app’s subtitle, including any references to your app or service being free or discounted. If you would like to advertise changes to your app’s price, consider including this information in the app description. Changes to your app’s price can be made in the Pricing and Availability section of App Store Connect.

Resources

For information on how to revise your app name, please review Renaming a Project or App.

For resources on metadata best practices, you may want to review the App Store Product Page information available on the Apple Developer website.

For information on scheduling price tier changes, please review the Schedule price changes section of App Store Connect Developer Help.

Since your App Store Connect status is Metadata Rejected, we do NOT require a new binary. To revise the metadata, visit App Store Connect to select your app and revise the desired metadata values. Once you’ve completed all changes, reply to this message in Resolution Center and we will continue the review.

朝起きてメールチェックしたら上記のようなメールが届いていました。
その後App Store Connectに移動してアプリの状況を見てみると下記のような感じになってます。スクリーンショット 2021-01-28 11.03.16.png

リジェクト指摘内容

Your app subtitle to be displayed on the App Store include references to the price of your app or the service it provides, which is not considered a part of these metadata items.

  • 無料の情報処理試験問題集アプリ

どうやらサブタイトルにアプリの価格に関する言及がされていた所が問題になったようです。
今回はサブタイトルだけ修正したら、再度レビューをしてくれるようですね。

修正後の手順について

調べてみるとリジェクトの内容にはバイナリ却下とメタデータ却下があるようで、バイナリ却下の場合、再度ipaファイル等上げ直さないといけないようです。

Since your App Store Connect status is Metadata Rejected, we do NOT require a new binary. To revise the metadata, visit App Store Connect to select your app and revise the desired metadata values. Once you’ve completed all changes, reply to this message in Resolution Center and we will continue the review.

今回私が却下されたのは、上記の通りメタデータリジェクトだったので、上げ直す必要はないようです。
また、変更が完了したらメールで変更完了の旨お伝えすれば審査を再開してくれるとのことで再審査に提出ボタンを押す必要はないみたいですね!

おわりに

Android版でGoogle Playにリリースした時は申請してから2〜3日でステータスが審査完了に変わってました。
iOSのほうが審査がいくらか厳しいとは聞いていましたが、前日の夕方に申請してから翌日朝には修正依頼のメールが来るスピード感はすごいなと思いました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ReactNative iOSパーミッションテキストのローカライズ方法

パーミッションリクエスト時のテキストを端末の言語に合わせて変更するときの設定について。

バージョン

ReactNative 0.63.3
Xcode 12.4

Info.plistにパーミッションを追加

アプリ内でカメラを使用するためにPrivacy - Camera Usage Descriptionがあるとして、このテキストをローカライズしたいとします。
スクリーンショット 2021-01-27 15.47.31.png

PROJECTからLocalizationsで多言語化したい言語を追加する

まずLocalizationsから多言語化したい言語を追加します。今回は例として英語と中国語(簡体字)を追加しています。
スクリーンショット 2021-01-27 15.46.32.png

InfoPlist.stringsファイルを作成する。

スクリーンショット 2021-01-27 15.36.43.png
スクリーンショット 2021-01-27 15.41.01.png
Infoplist.stringsとかLocalizable.stringsとかに名前を変えると反映されないので注意。ドキュメントにちゃんと書いてありました。

The values for many keys in an information property list file are human-readable strings that are displayed to the user by the Finder or your own app. When you localize your app, you should be sure to localize the values for these strings in addition to the rest of your app’s content.
Localized values are not stored in the Info.plist file itself. Instead, you store the values for a particular localization in a strings file with the name InfoPlist.strings. You place this file in the same language-specific project directory that you use to store other resources for the same localization. The contents of the InfoPlist.strings file are the individual keys you want localized and the appropriately translated value. The routines that look up key values in the Info.plist file take the user’s language preferences into account and return the localized version of the key (from the appropriate InfoPlist.strings file) when one exists. If a localized version of a key does not exist, the routines return the value stored in the Info.plist file.
About Information Property List Files

作成したInfoPlist.stringsをLocalizeして多言語化する

Xcodeの右側のカラムからLocalizeボタンを押して追加した言語を選択します。
スクリーンショット 2021-01-27 15.38.01.png
スクリーンショット 2021-01-27 15.47.41.png
en.lprojzh-Hans.lprojのように言語ごとにディレクトリが作成され、ディレクトリ内にInfoPlist.stringsが作成されているはずです。
スクリーンショット 2021-01-27 15.49.28.png
以下のようにInfoPlist.stringsごとに言語ごとにパーミッションテキストで表示したいテキストを設定します。

"NSCameraUsageDescription" = "告诉用户为什么应用会请求访问设备的摄像头的信息。";

シミュレータで言語を変更して確認すると設定したテキストが表示されるはずです。
スクリーンショット 2021-01-27 17.51.00.png

プッシュ通知パーミッションのローカライズ

プッシュ通知のパーミッションテキストは変更できないため端末の言語によって自動で切り替わる。
シミュレータだと言語を変更してもプッシュ通知のパーミッションダイアログ内のテキストは英語で表示されるため実機で確認すること。

Androidは?

Androidはパーミッションメッセージを変更できない。

注: launch() を呼び出したときに表示されるダイアログをアプリでカスタマイズすることはできません。ユーザーに詳細な情報やコンテキストを提供するには、アプリの UI を変更して、アプリの機能に特定の権限が必要な理由をユーザーにわかりやすく説明します。たとえば、機能を有効にするボタンのテキストを変更します。
Request app permissions | Android Developers

参考

Requesting Permission - App Architecture - iOS - Human Interface Guidelines - Apple Developer
Protected Resources - Apple Developer
インターナショナライゼーションとローカリゼーションのガイド
Handle Localization for iOS Native Messages
iOS10から必要になったユーザデータにアクセスする為に表示する文言をローカライズする

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

iOS NWConnection利用時のTLSの証明書を無視する方法

はじめに

iPhoneと家庭内で使っているIoT機器とのTLSを使った暗号通信する時に、サーバ証明書の有効性の確認が失敗して、通信エラーになる現象がありました。例えば、IoT機器が自己署名の証明書を使っている場合です。このような場合に、iOSでTLS証明書を無視して通信する方法を書いておきます。

通常の実装

NWConnectionを用いた通常のTLS実装は、以下のようになります。今回の記事に関連する部分(NWConnectionのインスタンス化)のみ記載しています。この実装では、サーバ証明書の確認を行います。このため、IoT機器が自己署名の証明書を使っている場合には、サーバ証明書のエラーとなりIoT機器と通信ができません。

let connection = NWConnection(host: host, port: port, using: .tls)

サーバ証明書を無視する実装

以下のように、NWConnectionのパラメータ(using: params)を設定することで、サーバ証明書を無視することができます。sec_protocol_options_set_verify_block()sec_protocol_verify_complete(true)を設定します。この時に、connection.start(queue: queue)で使うqueueが引数に必要です。このため、対象のコードの上下にqueueに関するコードも記載してあります。

let queue = DispatchQueue(label: "label")

let options = NWProtocolTLS.Options()
sec_protocol_options_set_verify_block(options.securityProtocolOptions, { (_, _, sec_protocol_verify_complete) in
        sec_protocol_verify_complete(true)
    }, queue)
let params = NWParameters(tls: options)
let connection = NWConnection(host: host, port: port, using: params)

// 途中省略
connection.start(queue: queue)

参考文献

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む