Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
8a9cdd1
Build bump
dzenbot Apr 18, 2026
c16526b
Displaying the series a race belongs to, in the race detail view
dzenbot Apr 18, 2026
f184d24
Adding empty tab for Events
Apr 28, 2026
55a532f
On iOS26, the UIBarButtonItems when 'done' style are blue. Switching …
dzenbot Apr 28, 2026
66cf6d7
Small UI code tweaks
dzenbot May 5, 2026
2f9f721
Applying recommended settings by XCode
dzenbot May 5, 2026
4e13b6e
Adding the ability to remove a pilot directly from the race's pilot e…
dzenbot May 5, 2026
893a471
Implementing iOS26 Liquid Glass adoption
dzenbot May 15, 2026
06cd343
Removing tab bar background effect, since it's busted with iOS26 SDk
dzenbot May 15, 2026
8c86f13
Adjusting the login button too
dzenbot May 15, 2026
60c4490
Making the chapter and user buttons larger on iOS26
dzenbot May 15, 2026
feba10e
Updating the text editor toolbar for iOS26 new layout
dzenbot May 19, 2026
a312dff
Member badges too
dzenbot May 19, 2026
da1a93c
Version bump
dzenbot May 19, 2026
be72cef
Initial implementation of the IO26 schedule
dzenbot May 19, 2026
43f91c7
Displaying Done button to follow iOS26 UI style
dzenbot May 19, 2026
cbc46b7
More UI implementation for IO26 schedule + favoriting
dzenbot May 20, 2026
6df6de6
Build bump
dzenbot May 20, 2026
9e9dc12
Updating release notes
dzenbot May 23, 2026
8ab2cad
Displaying a 4th tab for IO26, days prior and days after IO. After th…
dzenbot May 23, 2026
c20e870
Storing bucket listed sessions and scheduling them via local notifica…
dzenbot May 24, 2026
55d7d8b
Prompting an alert for when scheduling or cancelling the schedule, an…
dzenbot May 25, 2026
4565843
Persisting the entire IO26 schedule locally, in case of bad connectiv…
dzenbot May 25, 2026
d1a9b0e
Larger refactoring + adding personalized filters for Event sessions
dzenbot May 26, 2026
2ed27d7
Build bump
dzenbot May 26, 2026
172eb6b
Fixing more layout issues with iOS26 + a crash caused by a backwards …
dzenbot May 26, 2026
74c9a21
Improving the display of event's filter buttons on pre-iOS26
dzenbot May 26, 2026
aee1e26
Fixing button selection
dzenbot May 26, 2026
2201469
Set the initial date to the first date of the list, or today's, if it…
dzenbot May 26, 2026
564c92a
Build bump
dzenbot May 26, 2026
3887bee
Fixing button state appearance
dzenbot May 26, 2026
51ac5a6
Redesigning the app icon using Icon Composer and add new variants for…
dzenbot May 26, 2026
e6891c2
Fixing auto-layout issues on pre-iOS26 layouts
dzenbot May 26, 2026
18bc837
Fixing corner radius issue
dzenbot May 26, 2026
55ca34f
Adding empty data set to IO26 events
dzenbot May 26, 2026
f7a6a66
Build bump
dzenbot May 26, 2026
b5413b1
Icon Composer is amazing! No more zillion icon files needed.
dzenbot May 26, 2026
e426dfc
Tweaking some appearance. Placeholder hack to trick iOS26 liquid glas…
dzenbot May 27, 2026
533dd34
Adding link to IO26 race formats
dzenbot May 27, 2026
7078cb7
Build bump
dzenbot May 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
109 changes: 109 additions & 0 deletions Documentation/App Store/RaceSync Liquid Icon.icon/icon.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
{
"fill" : {
"automatic-gradient" : "extended-srgb:0.00000,0.53333,1.00000,1.00000"
},
"groups" : [
{
"blend-mode-specializations" : [
{
"appearance" : "dark",
"value" : "multiply"
}
],
"blur-material" : 0.5,
"layers" : [
{
"fill" : "none",
"glass" : false,
"hidden" : false,
"image-name" : "icon3.png",
"name" : "icon3"
},
{
"blend-mode" : "normal",
"fill" : "none",
"glass" : false,
"hidden" : true,
"image-name" : "icon.png",
"name" : "icon",
"opacity" : 1
},
{
"blend-mode" : "normal",
"fill" : "none",
"glass" : false,
"hidden" : true,
"image-name" : "icon2.png",
"name" : "icon2",
"opacity" : 1
}
],
"lighting" : "individual",
"shadow" : {
"kind" : "neutral",
"opacity" : 0.5
},
"specular" : true,
"translucency" : {
"enabled" : true,
"value" : 0.5
}
},
{
"blend-mode-specializations" : [
{
"appearance" : "dark",
"value" : "normal"
}
],
"blur-material" : null,
"hidden" : false,
"layers" : [
{
"blend-mode" : "plus-lighter",
"fill" : {
"linear-gradient" : [
"srgb:1.00000,1.00000,1.00000,1.00000",
"srgb:0.38142,0.37284,0.90874,1.00000"
],
"orientation" : {
"start" : {
"x" : 0.5,
"y" : 1
},
"stop" : {
"x" : 0.5,
"y" : 0.3
}
}
},
"glass" : false,
"hidden" : true,
"image-name" : "icon-bkgd2.png",
"name" : "icon-bkgd2",
"opacity" : 0.39
},
{
"blend-mode" : "normal",
"glass" : false,
"hidden" : false,
"image-name" : "icon-bkgd.png",
"name" : "icon-bkgd",
"opacity" : 1
}
],
"shadow" : {
"kind" : "neutral",
"opacity" : 0.5
},
"specular" : true,
"translucency" : {
"enabled" : true,
"value" : 0.5
}
}
],
"supported-platforms" : {
"squares" : "shared"
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified Documentation/App Store/RaceSync_iOS_Default_Icon_2.0.psd
Binary file not shown.
Binary file modified Documentation/App Store/RaceSync_screenshots.psd
Binary file not shown.
Binary file modified Documentation/App Store/Screenshots/RaceSync_screenshots_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Documentation/App Store/Screenshots/RaceSync_screenshots_2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Documentation/App Store/Screenshots/RaceSync_screenshots_3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Documentation/App Store/Screenshots/RaceSync_screenshots_5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Documentation/App Store/Screenshots/RaceSync_screenshots_6.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Documentation/App Store/Screenshots/RaceSync_screenshots_7.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Documentation/App Store/Screenshots/RaceSync_screenshots_8.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 17 additions & 0 deletions RELEASE-NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,23 @@

---

## 2.1

### 2026 International Open's interactive schedule:
* Filter the different races per day.
* Fav the races you want to attend & get notified an hour before they start.
* Build your customized schedule, and filter with special macros.

### iOS26 upgrade:
* Compiling with the latest iOS26 SDK
* Large UI refactoring to conform to iOS26's liquid glass UI

### Fixes and Enhancements:
* General bug fixes
* Backwards compatibility fixing

---

## 2.0

### Introducing MultiGP Series:
Expand Down
112 changes: 86 additions & 26 deletions RaceSync.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
LastUpgradeVersion = "2640"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
LastUpgradeVersion = "2640"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
LastUpgradeVersion = "2640"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand Down
16 changes: 15 additions & 1 deletion RaceSync/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
#if !DEBUG
EventTracker.configure()
#endif

UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().getNotificationSettings { _ in }

return true
}

Expand Down Expand Up @@ -63,7 +67,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {

return true
}

Expand All @@ -82,3 +85,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
completionHandler(.newData)
}
}

extension AppDelegate: UNUserNotificationCenterDelegate {

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
// app is foreground when notification fires
}

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
// user tapped the notification
}
}
62 changes: 0 additions & 62 deletions RaceSync/Assets.xcassets/AppIcon.appiconset/Contents.json

This file was deleted.

Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
12 changes: 0 additions & 12 deletions RaceSync/Assets.xcassets/btn_arrow_bkgd.imageset/Contents.json

This file was deleted.

Binary file not shown.

This file was deleted.

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added RaceSync/Assets.xcassets/icn_settings_io.pdf
Binary file not shown.
Binary file not shown.
1 change: 1 addition & 0 deletions RaceSync/Constants/AppWebConstants.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public class AppWebConstants {
static let tracks = "https://www.multigp.com/multigp-tracks/"
static let obstaclesDoc = "https://www.multigp.com/multigp-drone-race-course-obstacles/"
static let seasonRulesDoc = "https://www.multigp.com/organizer-resources/rule-book/"
static let io26RaceFormats = "https://www.multigp.com/io26/race-formats/"

static let livefpv = "https://livefpv.com/"
static let fpvscores = "https://fpvscores.com/"
Expand Down
19 changes: 18 additions & 1 deletion RaceSync/Constants/ImageConstants.swift
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,27 @@ enum SystemImg {
static let chevronRight = UIImage(systemName:"chevron.right") // iOS 13.0+

static let pin_small = UIImage(systemName:"mappin.and.ellipse") // iOS 13.0+
static let globe = UIImage(systemName:"globe") // iOS 13.0+
static let search = UIImage(systemName: "magnifyingglass") // iOS 13.0+
static let badge_cross_small = UIImage(systemName: "xmark.square.fill") // iOS 13.0+
static let trashFill = UIImage(systemName:"trash.fill") // iOS 13.0+
static let star = UIImage(systemName:"star") // iOS 13.0+
static let starFill = UIImage(systemName:"star.fill") // iOS 13.0+

static var globe: UIImage? {
if #available(iOS 15.0, *) {
return UIImage(systemName:"globe.americas") // iOS 15.0+
} else {
return UIImage(systemName:"globe") // iOS 13.0+
}
}

static var globeFill: UIImage? {
if #available(iOS 15.0, *) {
return UIImage(systemName:"globe.americas.fill") // iOS 15.0+
} else {
return UIImage(systemName:"globe.fill") // iOS 13.0+
}
}

static var flagCheckeredCrossed: UIImage? {
if #available(iOS 18.0, *) {
Expand Down
Binary file added RaceSync/RaceSync.icon/Assets/icon-bkgd.png
Binary file added RaceSync/RaceSync.icon/Assets/icon-bkgd2.png
Binary file added RaceSync/RaceSync.icon/Assets/icon.png
Binary file added RaceSync/RaceSync.icon/Assets/icon2.png
Binary file added RaceSync/RaceSync.icon/Assets/icon3.png
Loading