Skip to content

Commit 924f6af

Browse files
committed
fixing ios 17 issue
1 parent f39c0d6 commit 924f6af

File tree

3 files changed

+68
-66
lines changed

3 files changed

+68
-66
lines changed

FitCount.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@
379379
"@executable_path/Frameworks",
380380
);
381381
MARKETING_VERSION = 0.4;
382-
PRODUCT_BUNDLE_IDENTIFIER = ai.quickpose.FitCount;
382+
PRODUCT_BUNDLE_IDENTIFIER = ai.quickpose.demo;
383383
PRODUCT_NAME = "$(TARGET_NAME)";
384384
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
385385
SUPPORTS_MACCATALYST = NO;
@@ -413,7 +413,7 @@
413413
"@executable_path/Frameworks",
414414
);
415415
MARKETING_VERSION = 0.4;
416-
PRODUCT_BUNDLE_IDENTIFIER = ai.quickpose.FitCount;
416+
PRODUCT_BUNDLE_IDENTIFIER = ai.quickpose.demo;
417417
PRODUCT_NAME = "$(TARGET_NAME)";
418418
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
419419
SUPPORTS_MACCATALYST = NO;

FitCount.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

FitCount/Workout/QuickPoseBasicView.swift

Lines changed: 64 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ enum ViewState: Equatable {
3737
}
3838

3939
struct QuickPoseBasicView: View {
40-
private var quickPose = QuickPose(sdkKey: "YOUR SDK KEY") // register for your free key at https://dev.quickpose.ai
40+
private var quickPose = QuickPose(sdkKey: "YOUR SDK KEY HERE") // register for your free key at https://dev.quickpose.ai
4141
@EnvironmentObject var viewModel: ViewModel
4242
@EnvironmentObject var sessionConfig: SessionConfig
4343

@@ -182,78 +182,80 @@ struct QuickPoseBasicView: View {
182182
}
183183
.onAppear() {
184184
UIApplication.shared.isIdleTimerDisabled = true
185-
quickPose.start(features: sessionConfig.exercise.features, onFrame: { status, image, features, feedback, landmarks in
186-
overlayImage = image
187-
if case .success(_,_) = status {
188-
189-
switch state {
190-
case .introBoundingBox:
185+
DispatchQueue.main.asyncAfter(deadline: .now()+1.0){
186+
quickPose.start(features: sessionConfig.exercise.features, onFrame: { status, image, features, feedback, landmarks in
187+
overlayImage = image
188+
if case .success = status {
191189

192-
if let landmarks = landmarks, canMoveFromBoundingBox(landmarks: landmarks) {
193-
state = .boundingBox(enterTime: Date())
194-
boundingBoxMaskWidth = 0
195-
}
196-
case .boundingBox(let enterDate):
197-
if let landmarks = landmarks, canMoveFromBoundingBox(landmarks: landmarks) {
198-
let timeSinceInsideBBox = -enterDate.timeIntervalSinceNow
199-
boundingBoxMaskWidth = timeSinceInsideBBox / 2
200-
if timeSinceInsideBBox > 2 {
201-
state = .introExercise(sessionConfig.exercise)
190+
switch state {
191+
case .introBoundingBox:
192+
193+
if let landmarks = landmarks, canMoveFromBoundingBox(landmarks: landmarks) {
194+
state = .boundingBox(enterTime: Date())
195+
boundingBoxMaskWidth = 0
202196
}
203-
} else {
204-
state = .introBoundingBox
205-
}
206-
case .introExercise(_):
207-
DispatchQueue.main.asyncAfter(deadline: .now()+0.5) {
208-
state = .exercise(SessionData(count: 0, seconds: 0), enterTime: Date())
209-
}
210-
case .exercise(_, let enterDate):
211-
let secondsElapsed = Int(-enterDate.timeIntervalSinceNow)
212-
213-
if let feedback = feedback[sessionConfig.exercise.features.first!] {
214-
feedbackText = feedback.displayString
215-
} else {
216-
feedbackText = nil
197+
case .boundingBox(let enterDate):
198+
if let landmarks = landmarks, canMoveFromBoundingBox(landmarks: landmarks) {
199+
let timeSinceInsideBBox = -enterDate.timeIntervalSinceNow
200+
boundingBoxMaskWidth = timeSinceInsideBBox / 2
201+
if timeSinceInsideBBox > 2 {
202+
state = .introExercise(sessionConfig.exercise)
203+
}
204+
} else {
205+
state = .introBoundingBox
206+
}
207+
case .introExercise(_):
208+
DispatchQueue.main.asyncAfter(deadline: .now()+0.5) {
209+
state = .exercise(SessionData(count: 0, seconds: 0), enterTime: Date())
210+
}
211+
case .exercise(_, let enterDate):
212+
let secondsElapsed = Int(-enterDate.timeIntervalSinceNow)
217213

218-
if case .fitness = sessionConfig.exercise.features.first, let result = features[sessionConfig.exercise.features.first!] {
219-
_ = counter.count(result.value) { newState in
220-
if !newState.isEntered {
221-
Text2Speech(text: "\(counter.state.count)").say()
222-
DispatchQueue.main.asyncAfter(deadline: .now()+0.1) {
223-
withAnimation(.easeInOut(duration: 0.1)) {
224-
countScale = 2.0
225-
}
226-
DispatchQueue.main.asyncAfter(deadline: .now()+0.4) {
227-
withAnimation(.easeInOut(duration: 0.2)) {
228-
countScale = 1.0
214+
if let feedback = feedback[sessionConfig.exercise.features.first!] {
215+
feedbackText = feedback.displayString
216+
} else {
217+
feedbackText = nil
218+
219+
if case .fitness = sessionConfig.exercise.features.first, let result = features[sessionConfig.exercise.features.first!] {
220+
_ = counter.count(result.value) { newState in
221+
if !newState.isEntered {
222+
Text2Speech(text: "\(counter.state.count)").say()
223+
DispatchQueue.main.asyncAfter(deadline: .now()+0.1) {
224+
withAnimation(.easeInOut(duration: 0.1)) {
225+
countScale = 2.0
226+
}
227+
DispatchQueue.main.asyncAfter(deadline: .now()+0.4) {
228+
withAnimation(.easeInOut(duration: 0.2)) {
229+
countScale = 1.0
230+
}
229231
}
230232
}
231233
}
232234
}
233235
}
234236
}
237+
238+
let newResults = SessionData(count: counter.state.count, seconds: secondsElapsed)
239+
state = .exercise(newResults, enterTime: enterDate) // refresh view for every updated second
240+
var hasFinished = false
241+
if sessionConfig.useReps {
242+
hasFinished = counter.state.count >= sessionConfig.nReps
243+
} else {
244+
hasFinished = secondsElapsed >= sessionConfig.nSeconds + sessionConfig.nMinutes * 60
245+
}
246+
247+
if hasFinished {
248+
state = .results(newResults)
249+
quickPose.stop()
250+
}
251+
default:
252+
break
235253
}
236-
237-
let newResults = SessionData(count: counter.state.count, seconds: secondsElapsed)
238-
state = .exercise(newResults, enterTime: enterDate) // refresh view for every updated second
239-
var hasFinished = false
240-
if sessionConfig.useReps {
241-
hasFinished = counter.state.count >= sessionConfig.nReps
242-
} else {
243-
hasFinished = secondsElapsed >= sessionConfig.nSeconds + sessionConfig.nMinutes * 60
244-
}
245-
246-
if hasFinished {
247-
state = .results(newResults)
248-
quickPose.stop()
249-
}
250-
default:
251-
break
254+
} else if state != .startVolume && state != .instructions{
255+
state = .introBoundingBox
252256
}
253-
} else if state != .startVolume && state != .instructions{
254-
state = .introBoundingBox
255-
}
256-
})
257+
})
258+
}
257259
}
258260
.onDisappear {
259261
UIApplication.shared.isIdleTimerDisabled = false

0 commit comments

Comments
 (0)