2016-07-03 3 views
0

내 앱에 심박동 장치가 연결되어 있고 다른 시나리오에서 심박동 수를 잃어 버릴 염려가 있습니다.무한히 백그라운드에서 심박수를 스트리밍합니까?

앱이 포 그라운드에있을 때 심장 박동을 스트리밍하고 타사 데이터베이스에 저장하고 있습니다. 그것은 쉬운 부분입니다.

사용자가 운동 중일 때 앱이 백그라운드로 들어가고 심장 박동수가 여전히 스트리밍되는 경우 상황이 복잡해집니다. 파일 시스템이 암호화되어 데이터베이스에 쓸 수 없으므로 내 생각은 텍스트 파일에 심박수를 추가 한 다음 응용 프로그램이 포 그라운드로 되돌아 오면 데이터베이스에 끌어다 놓는 것입니다.

심장 박동이 1 초에 1 초이기 때문에 여전히 더 복잡해 지므로 앱이 다시 돌아 오기 전에 수만 명이있을 수 있습니다. 나는 심박수를 나타내는 파일 이름을 만들고 파일 이름과 생성 날짜에서 데이터를 파생시키기 위해 텍스트 파일에 추가하는 대신 생각하고 있습니다. 그렇게하면 파일을 열 필요가 없습니다. 데이터베이스에 읽을 때 메타 데이터를 읽고 파일을 삭제하면됩니다.

겉으로보기에는 단순한 작업을 위해 훨씬 더 복잡해졌습니다. 코어 블루투스를 처리하고 연결 상태를 유지해야하지만 iOS가 앱이 심박동 기기를 무기한 수신 할 수있게 해줄 것이라고 상상할 수 없습니다. 어떤 시점에서 앱이 종료되지만 심박수 흐름은 어떻게됩니까?

무한히 백그라운드에서 스트리밍 심장 박동을 처리하는 입증 된 방법이 있습니까? 모든 조언이나 경험은 대단히 감사하겠습니다!

+2

파일 이름만으로 수만 개의 파일을 만드는 것은 좋지 않은 생각입니다. – zaph

+0

Apple과 연락하는 것이 좋습니다. 도울 수있는 포럼과 전도자가 있습니다. – zaph

답변

2

블루투스

아이폰 OS는 백그라운드 모드에서 특정 유형의 앱을 실행을 지원합니다. 이 모드에서는 블루투스 연결이 유지됩니다. 심장 박동 모니터는 개발자 문서에 언급 응용 프로그램의 유형 중 하나입니다 :

이 지원은 심장 박동 모니터로 정기적으로 데이터를 전달 액세서리의 일부 유형, 중요하다. 외부 액세서리 통신에 대한 지원은 Xcode 프로젝트의 Capabilities 탭에있는 Background modes 섹션에서 사용할 수 있습니다. 이 모드를 활성화하면 외부 액세서리 프레임 워크 액세서리 세션 활성 세션을 닫지 않습니다.

iOS 프로그래밍 가이드의 Background Execution 섹션을 참조하십시오. 개별 파일 노드가 성능 저하로 이어질 수

데이터 로깅

로그 기록을 보관. 응용 프로그램이 백그라운드 모드에서 실행되는 동안 이상적으로 데이터베이스에 쓸 수 있어야합니다.

다른 옵션은 샘플을 텍스트 파일에 추가 한 다음 한 줄씩 파일을 읽고 데이터베이스로 가져 오는 것입니다. 로깅을 위해 단일 파일을 사용하는 것은 수천 개의 개별 파일보다 효율적입니다. 파일 크기가 걱정되면 파일을 분할하는 간단한 방법은 현재 날짜와 시간을 파일 이름으로 사용하는 것입니다. 예 : 'year-month-day-hour-minutes'형식은 매분마다 새 파일을 만들고 각 파일은 고유합니다.

파일에 여러 프로세스가있는 경우 (예 : 파일이 공유 된 응용 프로그램 컨테이너에있는 경우) NSFileCoordinator을 사용하여 경쟁 조건을 방지하고 파일의 무결성을 보장 할 수 있습니다.

디스크 보호를 사용하는 경우 로그 파일 (또는 데이터베이스)의 쓰기 방지를 위해 파일 보호 모드를 변경해야 할 수 있습니다. NSFileManager.defaultManager().setAttributes(:ofItemAtPath)으로 파일 보호 모드를 '없음'으로 설정하십시오.

iOS 프로그래밍 가이드의 Privacy Strategies 섹션을 참조하십시오.

+0

NSUserDefaults에 3 시간 동안 스트리밍 된 심장 박동수를 테스트 한 후 죽었습니다. ( – TruMan1

+0

배경 모드는 iOS에서 이것을 구현하는 실제적인 방법입니다 .3 시간은 iOS가 앱을 죽이지 않는다는 것을 증명할만큼 길어야합니다. 고의로 iOS가 앱을 죽이는 경우 최대 10 분이 지나면 충돌이 발생합니다. 앱의 버그 또는 iOS 프레임 워크와 같은 다른 원인으로 인해 충돌이 발생할 가능성이 큽니다. 앱에서 리소스 (메모리, 파일 핸들, 디스크 공간)가 부족해질 수있는 개별 이벤트 수가 많습니다. 런타임에 크래시를 트리거 할 수 있는지 또는 크래시 보고서를 통해 깨달을 수 있는지 확인하십시오. –

+0

@ TruMan1 "죽었다"는 것은 무엇을 의미합니까? 응용 프로그램과 로깅, BLE 연결, 올바른 방법으로 구현할 경우 수행하려는 작업은 분명히 수행 할 수 있습니다. –