A Safari extension for macOS that allows you to quickly share the current webpage URL to Threads.
- Share any webpage URL to Threads with one click
- Pre-populated text field with the current page URL
- Edit the text before posting
- Supports both light and dark mode
- Keyboard shortcut: Cmd+Enter to post
- macOS 13.0 or later
- Safari 16.0 or later
- Threads account
Install from the Mac App Store
- Active Apple Developer Program membership ($99/year)
- App Store Connect account set up
- Certificates and provisioning profiles configured
- Bundle Identifier set (
com.shokk.ThreadsExtension) - Version number set (1.0)
- Build number set (1)
- Deployment target set (macOS 13.0+)
- App Sandbox enabled
- Hardened Runtime enabled
- App category set (Social Networking)
- Create App Store distribution certificate in Apple Developer Portal
- Create App Store provisioning profile for main app
- Create App Store provisioning profile for extension
- In Xcode: Set signing to "Manual" for release builds
- Select the App Store provisioning profiles
- 16x16 @1x (16pt)
- 16x16 @2x (32pt)
- 32x32 @1x (32pt)
- 32x32 @2x (64pt)
- 128x128 @1x (128pt)
- 128x128 @2x (256pt)
- 256x256 @1x (256pt)
- 256x256 @2x (512pt)
- 512x512 @1x (512pt)
- 512x512 @2x (1024pt)
Note: For best quality, provide a 1024x1024 PNG icon and let Xcode generate all sizes.
- Create new app in App Store Connect
- Set primary language
- Set app name: "Share to Threads"
- Set subtitle (optional, max 30 characters)
- Set privacy policy URL (REQUIRED)
- Set app category: Social Networking
- Complete App Privacy questionnaire in App Store Connect
- Data types collected: None (this extension only opens URLs)
- No tracking implemented
Mac App Store requires screenshots at these resolutions:
- 1280 x 800 pixels (minimum)
- 1440 x 900 pixels
- 2560 x 1600 pixels (Retina)
- 2880 x 1800 pixels (Retina)
Tip: Take screenshots showing:
- The extension popup with a URL ready to share
- Safari with the extension icon visible in the toolbar
- Write compelling description (up to 4000 characters)
- Add keywords (up to 100 characters, comma-separated)
- Prepare promotional text (optional, up to 170 characters)
- Add "What's New" text for updates
- Support URL
- Marketing URL (optional)
- Privacy Policy URL (REQUIRED for all apps)
Since this app:
- Accesses the current webpage URL
- Opens threads.net in a new tab
You need a privacy policy that states:
- What data is accessed (current tab URL)
- How the data is used (to share to Threads)
- No data is collected, stored, or transmitted to any server except threads.net
- No analytics or tracking
Sample Privacy Policy Statement:
Share to Threads accesses the URL of your current Safari tab solely to pre-populate the sharing dialog. This URL is only sent to threads.net when you choose to post. No data is collected, stored, or shared with any third parties. No analytics or tracking is implemented.
- In Xcode, select Product > Archive
- Wait for the archive to complete
- In the Organizer window, click Distribute App
- Select App Store Connect
- Choose Upload (or Export for manual upload)
- Follow the prompts to upload
- Build processing (usually 5-30 minutes)
- Add build to app version in App Store Connect
- Submit for review
- Wait for App Review (typically 24-48 hours)
- Missing privacy policy - Required for all apps
- Broken links - Test all URLs in your app listing
- Incomplete metadata - Fill out all required fields
- Placeholder content - Remove all "Lorem ipsum" or test text
- Missing app functionality - App must work as described
- Incorrect screenshots - Must accurately represent the app
For future updates:
- Increment MARKETING_VERSION (e.g., 1.0 → 1.1)
- Increment CURRENT_PROJECT_VERSION (e.g., 1 → 2)
- Update "What's New" text
- Archive and upload new build
ThreadsExtension/
├── ThreadsExtension/ # Main app container
│ ├── Assets.xcassets/ # App icons and assets
│ ├── Resources/ # App resources
│ ├── AppDelegate.swift
│ └── ViewController.swift
├── ThreadsExtension Extension/ # Safari extension
│ ├── Resources/
│ │ ├── manifest.json # Extension manifest
│ │ ├── popup.html/css/js # Extension popup
│ │ ├── background.js # Background script
│ │ └── images/ # Extension icons
│ ├── Info.plist
│ └── SafariWebExtensionHandler.swift
└── ThreadsExtension.xcodeproj
# Open in Xcode
open ThreadsExtension.xcodeproj
# Or build from command line
xcodebuild -project ThreadsExtension.xcodeproj -scheme ThreadsExtension -configuration ReleaseCopyright © 2024. All rights reserved.
