Live Activity fails to start with "unsupportedTarget" error on iOS 18 beta

Hi all, I’m developing a timer app with Live Activity support. On iOS 18.5 (iPhone 14 Pro Max), I cannot get Live Activity to start. When I call Activity.request(...) in my main app, it throws an unsupportedTarget error, and nothing appears on the Lock Screen or Dynamic Island.

What I’ve done:

  • Widget Extension Info.plist:
  <key>NSExtension</key>
  <dict>
      <key>NSExtensionPointIdentifier</key>
      <string>com.apple.widgetkit-extension</string>
  </dict>
  <key>NSSupportsLiveActivities</key>
  <true/>
  <key>NSSupportsLiveActivitiesFrequentUpdates</key>
  <true/>
  • Live Activity UI:

Implemented with ActivityConfiguration(for: xxx_Clock_liveactivitiesAttributes.self) and Dynamic Island support.

  • App Group:

Both main app and extension use the same App Group, and it’s enabled in Apple Developer Center and Xcode.

  • Tested on:

iPhone 14 Pro Max, iOS 18.5 (official release) Xcode [your version] (I have not tested on iOS 17.x, so I am not sure if this issue is specific to iOS 18.5.)

What I’ve tried:

  • Cleaned build folder, deleted Derived Data, uninstalled and reinstalled app.
  • Rebooted device.
  • Double-checked all Info.plist and entitlements settings.
  • Tried creating a new Widget Extension from scratch.

Problem:

  • Activity.request always throws unsupportedTarget.
  • No Live Activity appears on Lock Screen or Dynamic Island.
  • No other errors or crashes.

Questions:

  • Has anyone encountered this issue on iOS 18.5?
  • Are there any new requirements or changes for Live Activity in iOS 18.5?
  • Any suggestions or workarounds to make Live Activity work?
  • Any help or suggestions would be greatly appreciated!

While this is another matter from the issue you are encountering with Live Activities, for your specific use case, I would recommend to watch the WWDC Session Wake up to the AlarmKit API.

Perhaps it will solve your problem in another way , so you don't have to struggle with your own Live Activities.


Argun Tekant /  DTS Engineer / Core Technologies

Hi, the live activity function should look something like:

func startLiveActivity() {
        let attributes = TimerAttributes(/*…*/)
        let contentState = TimerAttributes.ContentState(/*…*/)
       
        Task { @MainActor in
            do {
                let activity = try Activity<TimerAttributes>.request(
                    attributes: attributes,
                    content: ActivityContent(state: contentState, staleDate: staleDate),
                    pushType: nil
                )
                self.activity = activity
            } catch {
                print("Failed to start Live Activity: \(error)")
            }
        }
    }

My TimerAttributes - this is your attributes for Live Activity, defined as:

struct TimerAttributes: ActivityAttributes {
    public struct ContentState: Codable, Hashable {
        /* content state variables */
    }
    
    /* other variables here */
}

so when ever you call your start, you have to call your Live Activity start function. I place it in a Live Activity Manager.

Live Activity fails to start with "unsupportedTarget" error on iOS 18 beta
 
 
Q