{"id":31241651,"url":"https://github.com/arraypress/swift-url-validator","last_synced_at":"2025-10-16T06:58:25.750Z","repository":{"id":309073480,"uuid":"1034984358","full_name":"arraypress/swift-url-validator","owner":"arraypress","description":"A comprehensive URL validation and classification library for Swift that intelligently detects platforms, media types, and validates URLs using native Apple APIs and UTType for maximum compatibility.","archived":false,"fork":false,"pushed_at":"2025-08-10T13:30:53.000Z","size":93,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-23T00:21:22.334Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arraypress.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-09T12:06:41.000Z","updated_at":"2025-08-10T13:30:58.000Z","dependencies_parsed_at":"2025-08-09T18:16:26.269Z","dependency_job_id":"52ef152d-61eb-4b98-9e57-8f9a5d763ca4","html_url":"https://github.com/arraypress/swift-url-validator","commit_stats":null,"previous_names":["arraypress/swift-url-validator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arraypress/swift-url-validator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arraypress%2Fswift-url-validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arraypress%2Fswift-url-validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arraypress%2Fswift-url-validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arraypress%2Fswift-url-validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arraypress","download_url":"https://codeload.github.com/arraypress/swift-url-validator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arraypress%2Fswift-url-validator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279164037,"owners_count":26117593,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-16T02:00:06.019Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-23T00:13:30.704Z","updated_at":"2025-10-16T06:58:25.744Z","avatar_url":"https://github.com/arraypress.png","language":"Swift","readme":"# Swift URL Validator\n\n![Swift Version](https://img.shields.io/badge/Swift-6.1+-orange.svg)\n![Platform](https://img.shields.io/badge/Platform-iOS%2015%2B%20|%20macOS%2012%2B%20|%20tvOS%2015%2B%20|%20watchOS%208%2B%20|%20visionOS%201%2B-blue.svg)\n![License](https://img.shields.io/badge/License-MIT-green.svg)\n![SPM Compatible](https://img.shields.io/badge/SPM-Compatible-brightgreen.svg)\n![Platform Coverage](https://img.shields.io/badge/Coverage-300%2B%20Platforms-purple.svg)\n\n**A comprehensive URL validation and classification library for Swift**\n\nIntelligently detects platforms, extracts IDs, and validates URLs using native Apple APIs\n\n---\n\n## ✨ Features\n\n- 🔍 **Smart URL Validation** - Validates URLs with or without schemes\n- 🌐 **300+ Platform Detection** - Recognizes major platforms like YouTube, Spotify, GitHub, etc.\n- 📁 **Media Type Detection** - Identifies file types using Apple's UTType system\n- 🎯 **ID Extraction** - Extracts video IDs, tweet IDs, and other platform-specific identifiers\n- 🏷️ **Platform Categorization** - Groups platforms into categories (video, audio, social, etc.)\n- 🔒 **Security Checks** - Identifies HTTPS, HTTP, and file URLs\n- ⚡ **High Performance** - Optimized pattern matching without regex\n- 🧵 **Thread Safe** - Fully Sendable compliant for Swift concurrency\n- 📱 **Multi-Platform** - Supports iOS, macOS, tvOS, watchOS, and visionOS\n- 🧪 **Thoroughly Tested** - 70+ test cases with comprehensive coverage\n\n## 📋 Requirements\n\n| Platform | Minimum Version |\n|----------|----------------|\n| iOS | 15.0+ |\n| macOS | 12.0+ |\n| tvOS | 15.0+ |\n| watchOS | 8.0+ |\n| visionOS | 1.0+ |\n| **Swift** | **6.1+** |\n| **Xcode** | **15.0+** |\n\n## 📦 Installation\n\n### Swift Package Manager\n\nAdd URLValidator to your project through Xcode:\n\n1. File → Add Package Dependencies\n2. Enter: `https://github.com/arraypress/swift-url-validator.git`\n3. Select \"Up to Next Major Version\" with \"1.0.0\"\n\nOr add to your `Package.swift`:\n\n```swift\ndependencies: [\n    .package(url: \"https://github.com/arraypress/swift-url-validator.git\", from: \"1.0.0\")\n]\n```\n\n## 🚀 Quick Start\n\n### Basic URL Validation\n\n```swift\nimport URLValidator\n\n// Validate URLs\n\"https://youtube.com\".isValidURL  // true\n\"not a url\".isValidURL            // false\n\"google.com\".isValidURL           // true (handles URLs without scheme)\n\n// Normalize URLs (adds https:// if missing)\n\"google.com\".normalizedURL        // \"https://google.com\"\n```\n\n### Platform Detection\n\n```swift\n// Detect platforms\n\"https://youtube.com/watch?v=123\".urlPlatform         // .youtube\n\"spotify.com/track/456\".urlPlatform                   // .spotify\n\"https://github.com/apple/swift\".urlPlatform          // .github\n\n// Check platform categories\n\"https://youtube.com/watch?v=123\".isVideoPlatformURL  // true\n\"https://spotify.com/track/456\".isAudioPlatformURL    // true\n\"https://twitter.com/user\".isSocialMediaURL           // true\n```\n\n### Media Type Detection\n\n```swift\n// Detect file types\n\"example.com/video.mp4\".urlMediaType      // .video\n\"example.com/song.mp3\".urlMediaType       // .audio\n\"example.com/image.jpg\".urlMediaType      // .image\n\"example.com/document.pdf\".urlMediaType   // .document\n\n// Check specific media types\n\"example.com/video.mp4\".hasVideoExtension // true\n\"example.com/song.mp3\".hasAudioExtension  // true\n```\n\n### ID Extraction\n\n```swift\n// Extract platform-specific IDs\n\"https://youtube.com/watch?v=dQw4w9WgXcQ\".youtubeVideoID        // \"dQw4w9WgXcQ\"\n\"https://twitter.com/user/status/123456\".tweetID                // \"123456\"\n\"https://instagram.com/p/ABC123\".instagramPostID                // \"ABC123\"\n\"https://open.spotify.com/track/4cOdK2wGLETKBW3PvgPWqT\".spotifyID // \"4cOdK2wGLETKBW3PvgPWqT\"\n\n// Extract GitHub info\nif let repo = \"https://github.com/apple/swift\".githubRepo {\n    print(repo.owner)  // \"apple\"\n    print(repo.repo)   // \"swift\"\n}\n```\n\n### Comprehensive URL Analysis\n\n```swift\nlet analysis = URLValidator.analyze(\"https://www.youtube.com/watch?v=dQw4w9WgXcQ#t=30s\")\n\nprint(analysis.isValid)           // true\nprint(analysis.platform)          // .youtube\nprint(analysis.platformCategory)  // .video\nprint(analysis.isHTTPS)          // true\nprint(analysis.host)             // \"www.youtube.com\"\nprint(analysis.extractedIDs)    // [\"youtube_video_id\": \"dQw4w9WgXcQ\"]\nprint(analysis.summary)          // \"YouTube • Video • Secure • 1 ID(s)\"\n```\n\n### Array Extensions\n\n```swift\nlet urls = [\n    \"https://youtube.com/watch?v=123\",\n    \"https://spotify.com/track/456\",\n    \"https://github.com/user/repo\",\n    \"not-a-url\"\n]\n\n// Filter valid URLs\nlet validURLs = urls.validURLs  // 3 URLs (excludes \"not-a-url\")\n\n// Filter by platform\nlet youtubeURLs = urls.filterURLs(platform: .youtube)\n\n// Filter by category\nlet audioURLs = urls.filterURLs(category: .audio)\n\n// Group by platform\nlet grouped = urls.groupURLsByPlatform()\n// [.youtube: [...], .spotify: [...], .github: [...]]\n```\n\n## 🌍 Supported Platforms\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eVideo Platforms (20+)\u003c/b\u003e\u003c/summary\u003e\n\n- YouTube, YouTube Shorts, YouTube Music, YouTube Studio\n- Vimeo, Dailymotion\n- TikTok, Instagram Reels\n- Twitch, Kick\n- Rumble, BitChute, Odysee\n- PeerTube, DTube\n- And more...\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eAudio/Music Platforms (25+)\u003c/b\u003e\u003c/summary\u003e\n\n- Spotify, Apple Music\n- SoundCloud, Bandcamp\n- Tidal, Deezer\n- Amazon Music, YouTube Music\n- Qobuz, Mixcloud\n- Podcasts: Apple Podcasts, Google Podcasts, Overcast\n- And more...\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eSocial Media (30+)\u003c/b\u003e\u003c/summary\u003e\n\n- Facebook, Twitter/X, Instagram\n- LinkedIn, Reddit, Pinterest\n- Tumblr, Mastodon, Threads, Bluesky\n- Truth Social, Gab, Parler\n- WeChat, Weibo, TikTok\n- And more...\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eDeveloper Platforms (15+)\u003c/b\u003e\u003c/summary\u003e\n\n- GitHub, GitLab, Bitbucket\n- Stack Overflow\n- CodePen, CodeSandbox, Replit\n- Figma, Dribbble, Behance\n- And more...\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eOther Categories\u003c/b\u003e\u003c/summary\u003e\n\n- **Gaming**: Steam, Epic Games, Battle.net, GOG, itch.io\n- **Financial**: PayPal, Venmo, Cash App, Coinbase, Binance\n- **Messaging**: WhatsApp, Telegram, Discord, Slack, Signal\n- **Cloud Storage**: Dropbox, Google Drive, OneDrive, iCloud\n- **E-commerce**: Amazon, eBay, Etsy, Shopify\n- **Web3**: OpenSea, Rarible, Foundation\n- **And 200+ more platforms!**\n\u003c/details\u003e\n\n## 📊 Platform Categories\n\n| Category | Description | Example Platforms |\n|----------|-------------|-------------------|\n| `video` | Video hosting and streaming | YouTube, Vimeo, TikTok |\n| `audio` | Music and podcast platforms | Spotify, Apple Music, SoundCloud |\n| `social` | Social media networks | Facebook, Twitter, Instagram |\n| `messaging` | Chat and communication | WhatsApp, Telegram, Discord |\n| `developer` | Code and design platforms | GitHub, GitLab, Figma |\n| `gaming` | Game stores and platforms | Steam, Epic Games, Xbox |\n| `financial` | Payment and trading | PayPal, Venmo, Coinbase |\n| `ecommerce` | Online shopping | Amazon, eBay, Etsy |\n| `cloud` | File storage services | Dropbox, Google Drive |\n| `learning` | Educational platforms | Udemy, Coursera, Khan Academy |\n| `web3` | Blockchain and NFT | OpenSea, Rarible |\n| `alternative` | Alternative tech platforms | Rumble, BitChute, Mastodon |\n\n## 🔧 Advanced Features\n\n### Security Checks\n\n```swift\n\"https://example.com\".isHTTPS     // true\n\"http://example.com\".isHTTP       // true\n\"file:///path/to/file\".isFileURL  // true\n```\n\n### URL Components\n\n```swift\nlet url = \"https://example.com/path?query=value#fragment\"\n\nurl.urlDomain     // \"example.com\"\nurl.urlPath       // \"/path\"\nurl.urlQuery      // \"query=value\"\nurl.urlExtension  // nil\n```\n\n## ⚡ Performance\n\nThe library is optimized for performance with:\n- **No Regular Expressions** - Dictionary-based pattern matching\n- **Efficient String Processing** - Minimal string allocations\n- **Lazy Evaluation** - Computations only when needed\n- **Thread Safe** - Fully concurrent-ready with Sendable compliance\n- **Native APIs** - Leverages Apple's UTType system\n\n## 🧪 Testing\n\nThe library includes comprehensive test coverage:\n- 70+ test cases\n- Platform detection tests\n- ID extraction tests\n- Edge case handling\n- Performance benchmarks\n- Thread safety tests\n\nRun tests:\n```bash\nswift test\n```\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## 📄 License\n\nURLValidator is available under the MIT license. See the [LICENSE](LICENSE) file for more info.\n\n## 🙏 Acknowledgments\n\n- Uses Apple's UTType system for robust file type detection\n- Inspired by the need for comprehensive URL validation in Swift\n- Built with Swift 6 concurrency in mind\n\n## 📬 Contact\n\n- **GitHub Issues**: [Report a bug](https://github.com/arraypress/swift-url-validator/issues)\n- **Discussions**: [Ask questions](https://github.com/arraypress/swift-url-validator/discussions)\n\n---\n\nMade with ❤️ by [ArrayPress](https://github.com/arraypress)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farraypress%2Fswift-url-validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farraypress%2Fswift-url-validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farraypress%2Fswift-url-validator/lists"}