If you’re new to Apple Watch software development, take a moment to familiarize yourself with the tools and technologies you’ll use. Apple provides everything you need to get started, and watchOS technologies help you get the features and performance you want from your apps.
Explore the possibilities
People use Apple Watch to get their most important information quickly. Because people wear it on their wrist, Apple Watch is always readily available. Deliver timely notifications, help people get in shape, offer news and information, or find other ways to keep people informed and entertained.
On Apple Watch, people interact with apps they download directly from the App Store for Apple Watch, or that accompany a companion iOS app. Apps play an important role, but complications and notifications also help people engage with your content.
Complications are small visual elements that appear on the watch face in predefined areas. Use them to display your app’s most crucial information, and to help people engage with your app’s content. For more information, view WidgetKit framework.
Notifications display time-sensitive information, using haptics, sound, and visual cues to get the user’s attention. Create notifications locally from your app, or push notifications to Apple Watch remotely from a server. For more information, view User Notifications framework.
Apps offer a full-screen way to view and interact with your content. watchOS apps focus only on the most relevant data that people need right now. For example, a weather app might display only the current forecast information, and omit detailed maps and data. View SwiftUI.
Where to start
Software development starts with Xcode — Apple’s integrated development environment. Xcode offers a complete set of tools for developing software, including project management support, code editors, visual editors for your UI, debugging tools, simulators for different devices, tools for assessing performance, and much more. Xcode also includes a complete set of system code modules — called frameworks — for developing your software.
Xcode includes the SDKs for iOS, iPadOS, macOS, tvOS, and watchOS.
An Xcode project manages the code and resources for your watchOS app. Choose whether to create a new project, or add your watchOS app to an existing project:
Create a new project for a watch-only app, or develop your watchOS and iOS app together. A watch-only app offers an experience that’s unique to Apple Watch, and doesn’t have a companion iOS app. Alternatively, you can create a project that includes both a watchOS app and an iOS app, and develop them together.
Open an existing iOS project to add a companion watchOS app to it. A companion watchOS app runs entirely on Apple Watch, but it matches or complements the features of your iOS app. For example, a fitness app on watchOS might collect workout data, and display and analyze that data on iOS. Both apps ship together on the App Store on iOS.
To create a new project in Xcode, choose File > New > Project and follow the prompts. For new watchOS apps, use SwiftUI to build your app’s UI and infrastructure. SwiftUI’s declarative programming model reduces the complexity of your code and the work it takes to manage your interface on different sizes of Apple Watch. For information about how to use Xcode, view Xcode documentation.
SwiftUI works seamlessly with Apple’s data management technologies to support the creation of your interfaces. Swift Standard Library and Foundation framework provide structural types such as arrays and dictionaries, and value types for strings, numbers, dates, and other common data values. For any custom types you define, adopt Swift’s Codable support to persist those types to disk. If your app manages larger amounts of structured data, Core Data and CloudKit offer object-oriented models for managing and persisting your data.
Use the Swift programming language to write your code. Swift’s syntax is concise, safe by design, and has modern features that make your code more expressive. Swift code also produces software that runs lightning-fast.
Swift Programming Language Guide
The Swift Programming Language book gives a complete overview of the Swift programming language, and is the perfect place to begin your journey learning Swift.
Design the user experience
An app that offers an engaging experience keeps people coming back. To create that experience, you need a UI that looks good, has an easy-to-understand layout, and emphasizes the right content. You also want interactions with your UI to be intuitive and match existing patterns. Most importantly, you want an interface that feels natural on Apple Watch.
Human Interface Guidelines
Apple’s Human Interface Guidelines offer invaluable information on how to design your app’s interface, navigate content, and manage interactions on Apple Watch. Make reading these guidelines a priority in your explorations of the watchOS ecosystem, and use the corresponding Apple Design Resources to dive into designing your app.
To ensure the best experience on Apple Watch, make sure you support the following features:
Some Apple Watch models feature an always-on display, where the watch face remains illuminated at all times. Be prepared to keep your app’s content up-to-date when your app is in the Always On state. View Designing your app for the Always On state.
Multiple sizes of Apple Watch
Apple Watch comes in sizes ranging from 38mm to 45mm, and SwiftUI helps you adapt your interface to any device size. Use the simulator to preview your interface and adjust the layout as needed. View Supporting multiple watch sizes.
People can ask the system to use a bigger font to make text more readable or a smaller font to fit more information onscreen. Respect these font-size changes by adjusting your app’s text too. Adopt standard type styles to make these changes automatically, or use system APIs to manually update text that contains custom fonts. In SwiftUI, get the new text size from the view’s environment.
Incorporate SF Symbols to make your app more adaptable to changes. The SF Symbols app offers a vast collection of configurable, vector-based images that adapt naturally to appearance and size changes. They also blend well with the San Francisco system font, resulting in a consistent look across Apple platforms. View Configuring and displaying symbol images in your UI.
Interactions with Apple Watch occur primarily through the touchscreen and Digital Crown. The system also supports voice-based input through Siri, and accessibility-related input like AssistiveTouch. A person might glance at the Apple Watch screen for only a few seconds, so eliminate the need for interactions altogether by showing relevant information right way.
Adopt best practices during development
Offer the best possible experience for everyone by doing the following:
Protect people’s privacy
Privacy is important, so keep people informed about how you use their data. If you collect data, offer a privacy statement that explains how you use that information. When you use Apple technologies that operate on personal data, include usage descriptions for the system to display on first use. For more information, view Protecting the user’s privacy.
Secure the data you collect and store
If you do collect data, make sure you protect that data from malicious attacks. Store very sensitive data such as passwords, financial data, or personally identifiable information in the user’s encrypted Keychain. Use on-disk encryption or other Apple security technologies to store other personal data. Use Apple CryptoKit to encrypt data that you store locally or send outside your app.
Audit your accessibility support
Apple builds accessibility support right into its technologies, but screen readers and other accessibility features rely on information your app provides. SwiftUI can describe each piece of your UI, but only you know how those pieces work together. Review accessibility labels and other descriptions to make sure they provide helpful information, and make sure focus-based navigation is simple and intuitive. For more information, view Accessibility.
Internationalize and localize your app
Embrace a global market by localizing your app for other regions and languages. Prepare your app using the Foundation framework, which provides code to format strings, dates, times, currencies, and numbers for different languages and regions. Ensure your UI looks good for both left-to-right and right-to-left languages. Localize app resources and add them to your Xcode project. For information about the internationalization and localization process, view Localization.
Design for everyone
Consider social and cultural differences when developing content, and avoid images and terms that have negative or derogatory connotations for portions of your audience. For more information, view Inclusion.
Test and debug your app thoroughly
During the development cycle, debug problems as they arise using the built-in Xcode debugger. Build automated test suites using XCTest and run them during every build to validate new code works as expected. Use the continuous integration system of Xcode Cloud to automate builds, test cycles, and the distribution of your apps to your QA teams.
Optimize your app’s performance
Identify bottlenecks and other performance issues in your code using the Instruments app that comes with Xcode. Profile your running code, find memory leaks, analyze resource usage, and much more. For information about how to gather metrics using Instruments, view Improving your app’s performance.
Choose a business model for your app
Distribute your app worldwide using a variety of business models, including free, free with in-app purchases, pay-to-download, and more. Build your interface in a way that offers a cohesive experience and supports your chosen business model. For more information, view Choosing a business model.
How to take it further
Once you have an app up and running, look for additional ways to improve the experience. Little things can make a big difference, whether it’s adding a particular feature, or approaching your content in a different way. For example:
Add Wallet and Apple Pay support
Make it easier for people to use your app’s services using Wallet and Apple Pay. If your app provides rewards cards, boarding passes, tickets, gift cards, or other types of digital cards, make them easier to access by adding them to someone’s Wallet. To make it easier for people to pay for goods and services, add Apple Pay support to your apps.
Make it easier to find relevant content
Think about how people use your app, and find ways to surface important content quickly. Use location data or the current date and time to filter results, or to generate important notifications. Use machine learning to analyze data and offer better solutions. Rearrange your interface dynamically to make frequently used content more accessible.
Encourage healthy lifestyle choices
Apple Watch is a premiere tool for gathering health and fitness information. If your app gathers health-related data, store it using HealthKit. Adding data to the HealthKit repository keeps it safe and under the control of the Apple Watch owner. They can view that information in the Health app on iOS, and see potentially important trends in their overall health and fitness.
Support your Bluetooth devices from Apple Watch
Apple Watch supports communication over many standard Bluetooth protocols, and you can also add support for custom protocols. If your company makes Bluetooth speakers or headphones, or makes Bluetooth medical devices like blood-pressure or glucose monitors, use Core Bluetooth to communicate between your app and hardware.
Add runtime condition checks around new features
When you update your app to support a new version of watchOS, place runtime condition checks around code for new features. Runtime checks eliminate the need to ship different versions of your app: one for people running the new version of watchOS, and one for people running older versions. Everyone runs the same app, and people on the newer version of watchOS gain access to the new features you added. For information about how to add runtime checks, view Running code on a specific platform or OS version.