Skip to content

Commit 70559b6

Browse files
committed
fix detecting iOS 26
1 parent 08c7187 commit 70559b6

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

__tests__/Device-test.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,22 @@ jest.mock('ua-parser-js', () => {
1111
};
1212
});
1313

14-
const UA_IOS_18 = 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1';
14+
const UA_IOS_18_1 = 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Mobile/15E148 Safari/604.1';
15+
const UA_IOS_18_2 = 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Mobile/15E148 Safari/604.1';
16+
1517
const UA_IOS_26_1 = 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Mobile/15E148 Safari/604.1';
1618
const UA_IOS_26_2 = 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0.1 Mobile/15E148 Safari/604.1';
1719
const UA_IOS_26_3 = 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0.1 Mobile/15E148 Safari/604.1';
1820
const UA_IOS_26_4 = 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_10 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.1.2 Mobile/15E148 Safari/604.1';
21+
const UA_IOS_26_5 = 'Mozilla/5.0 (iPhone; CPU iPhone OS 19_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6.2 Mobile/15E148 Safari/604.1';
1922

2023
describe('getOSAndName', () => {
2124
it('should return iOS version 18', () => {
22-
mockUA = UA_IOS_18;
25+
mockUA = UA_IOS_18_1;
2326
expect(getOSAndName().osVersion).toEqual('18.6');
27+
28+
mockUA = UA_IOS_18_2;
29+
expect(getOSAndName().osVersion).toEqual('18.5');
2430
});
2531

2632
it('should return iOS version 26', () => {
@@ -35,5 +41,8 @@ describe('getOSAndName', () => {
3541

3642
mockUA = UA_IOS_26_4;
3743
expect(getOSAndName().osVersion).toEqual('26');
44+
45+
mockUA = UA_IOS_26_5;
46+
expect(getOSAndName().osVersion).toEqual('26');
3847
});
3948
});

lib/Device.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ function getOSAndName(): DeviceInfo {
1515
// Detection logic inspired by UAParser guide on iOS 26:
1616
// https://docs.uaparser.dev/guides/how-to-detect-ios-26-using-javascript.html
1717
const [osMajor, osMinor] = (os.version ?? '').split('.');
18-
if (browser.name === 'Mobile Safari' && browser.major === '26' && os.name === 'iOS' && parseInt(osMajor, 10) >= 18 && parseInt(osMinor, 10) >= 6) {
18+
const osMajorInt = parseInt(osMajor, 10);
19+
const osMinorInt = parseInt(osMinor, 10);
20+
if (browser.name === 'Mobile Safari' && browser.major === '26' && os.name === 'iOS' && (osMajorInt > 18 || (osMajorInt === 18 && osMinorInt >= 6))) {
1921
osVersion = '26';
2022
}
2123

0 commit comments

Comments
 (0)