ユーザーが画面をロックすると、アプリは「非アクティブ」状態になります。これは、アプリをバックグラウンドに置くことと似ていますが、同じではありません。Appleのドキュメントには、「アプリはフォアグラウンドで実行されていますが、現在イベントを受信していません。(ただし、他のコードを実行している可能性があります)」と記載されています。
ただし、非アクティブ状態に入った後、iPhoneをアクティブに保つために何かが実行されていない限り、iPhoneは完全にスリープ状態になります... NSTimerが起動するのを待つことは、明らかにこの基準を満たしていません。この前の質問には議論があります。解決策の1つは、タイマーが作動したときにサウンドを再生し、その間、iPhoneがスリープ状態にならないように、無音のサウンドを継続的に再生することです。ハックですが、少なくともこの場合、完全に醜いハックではありません。サウンドを再生するためにiPhoneをスリープ状態に保つためにサウンドを使用することには、一種の対称性があるからです。
以前にリンクされたコンテンツ:長時間実行されるバックグラウンドタスクの実装に関するAppleのガイドライン
から:
バックグラウンドオーディオ
の再生オーディオを継続的に再生するアプリは(アプリがバックグラウンドで実行されている場合でも)、Info.plistファイルにUIBackgroundModesキー(値audioを含む)を含めることにより、バックグラウンドオーディオアプリとして登録できます。このキーを含むアプリは、バックグラウンドでユーザーに音声コンテンツを再生する必要があります。
これをアプリに実装していますか?そうでない場合は、それがあなたの問題です。
#2について:アプリの説明を更新して、画面がロックされた状態では機能しないことを示すことができますが、ユーザーが期待どおりに機能するようにすることをお勧めします。:)