Save the $60 connection fee when you shop Mobility online. Plus get fast, free shipping.
Bring-It-Back
iPhone 15 Pro Max
Experience iPhone 15 Pro Max on the most giving company in the world.I’m shopping for my business
Memory options: 256 GB
Colour options: Natural Titanium
Please note that iPhone 15 family has a USB-C connector. You can shop compatible accessories during checkout or at telus.com/accessories.
Bonus offer
Get 6 months of Apple Music free.
Giving back to build stronger communities
Since 2000, we have given $1.7 billion to build stronger, healthier communities.
See how we give back
Enjoy the latest Apple products on our award-winning 5G network.
iPhone 15 Pro
Now with titanium. Enjoy a customizable Action button and a more versatile Pro camera system.
More about iPhone 15 Pro
Apple Watch Series 9
Smarter. Brighter. Mightier. Featuring double tap, a magical way to interact with Apple Watch.
Discover Apple Watch Series 9
iPad (10th generation)
Bring all your ideas to life with a 10.9-inch Liquid Retina display and 12MP wide camera.
Discover iPad (10th generation)
Now’s the perfect time to upgrade.
iPhone 15 Pro Max has the longest opticalzoom in iPhone ever.
All-day battery life, with up to 29 hours ofvideo playback.◊Refer to legal disclaimers
Emergency SOS via satellite.◊Refer to legal disclaimers
Game-changing chip. Groundbreaking performance.
Titanium. So strong. So light. So Pro.
Superfast 5G.◊Refer to legal disclaimers
And Wi-Fi 6E for faster wireless speeds.◊Refer to legal disclaimersCharge iPhone 15 Pro with the same USB-C cable you use to charge other devices.
Compare
Which iPhone is right for you?
iPhone 15 Pro Max
iPhone 15 Pro
iPhone 15 Plus
iPhone 15
iPhone SE (3rd generation)
Choose models to compare.
Images
Finish
Quick look
Design
Dynamic Island
Chip
Camera
Optical Zoom
Safety
Battery
Connectivity
Face ID/Touch ID
Cellular
Designed to make a difference.
Privacy. That’s iPhone.
From Passkeys to Privacy Reports to the Health app, iPhone helps keep you in control of what you share.
iPhone for all.
iPhone contains built-in accessibility features like Magnifier, VoiceOver and Assistive Access, which helps users with cognitive disabilities tailor apps and experiences.
Designed to
make a difference.
Privacy.
That’s iPhone.
From Passkeys to Privacy Reports to the Health app, iPhone helps keep you in control of what you share.
iPhone for all.
iPhone contains built-in accessibility features like Magnifier, VoiceOver and Assistive Access, which helps users with cognitive disabilities tailor apps and experiences.
Easy to upgrade. Simple to switch.
Upgrading from another iPhone?
Just put your old iPhone next to your new one, and with a few taps you can transfer your data automatically.
Switching from an Android phone?
When you buy a new iPhone, the Move to iOS app makes it easy to transfer your photos, contacts andmore.
Even more to love.
MagSafe accessories
Snap on a magnetic case, wallet or both.
A colourful ecosystem of accessories for effortless attachment and faster wireless charging. With endless ways to combine, there is a mix to match any style.◊Refer to legal disclaimers
Buy an iPhone
and get 3 months of Apple TV+ free.◊Refer to legal disclaimers
•
New Apple Original series and films every month.
•
Stream on the AppleTV app on Apple devices, smart TVs, consoles or sticks.
•
Share with up to five family members.
AppleCare+
Expert support, extended coverage.
Apple-certified service
24/7 priority access to technical support
Accidental damage protection
'; document.querySelectorAll(this.selectorElsQuery).forEach((t, i) => { const r = t.querySelector("[selected=true]").innerText.trim(); "flex" === t.parentElement.parentElement.style.display && (e += `
${r}
`) }), this.headerEl.innerHTML = e }, updateSelectors() { document.querySelectorAll(this.selectorElsQuery).forEach((e, t) => { e.replaceWith(this.selectorEls[t]) }), this.cOrder.forEach((e, t) => { const i = this.selectorEls[t]; let r = 0; for (let t = 0; t < i.options.length; t++) { const n = i.options[t], s = Number(n.value) === e; s && (r = t), n.removeAttribute("selected"), n.setAttribute("selected", s), n.removeAttribute("aria-selected"), n.setAttribute("aria-selected", s) } i.selectedIndex = r }); for (var e = 0; e < this.selectorEls.length; e++) { const t = this.selectorEls[e], i = e < this.cMax; this.toggleVisibility(t.parentElement.parentElement, i) } }, updateRows() { this.clonedEls.forEach((e, t) => { const i = this.capturedEls[t], r = e.cloneNode(!0), n = r.querySelector("[role=rowheader]"), s = []; this.cOrder.forEach(e => { const t = `[index="${e}"]`, i = r.querySelector(t).parentElement; s.push(i) }), s.reverse().forEach(e => { r.prepend(e) }); for (let e = 0; e < r.children.length; e++) { const t = r.children[e]; "rowheader" !== t.getAttribute("role") && (t.style.order = "unset", this.toggleVisibility(t, e < this.cMax)) } r.prepend(n), i.innerHTML = r.innerHTML }) }, toggleVisibility(e, t) { e.style.visibility = t ? "visible" : "hidden", e.style.display = t ? "flex" : "none", e.style.order = "unset" }, init(e, t, i, r, n) { this.useStatic = n, this.capturedEls = document.querySelectorAll(e), this.capturedElsQuery = e, this.headerEl = document.querySelector(i), this.selectorEls = document.querySelectorAll(t), this.selectorElsQuery = t, this.staticElQuery = r, this.staticEl = this.useStatic && document.querySelector(this.staticElQuery).cloneNode(!0), this.useStatic = n, this.clonedEls = this.arrayFromNodeList(this.capturedEls), this.addListeners() } }, viewportManager = { nState: null, cState: null, init: function () { this.addListeners() }, addListeners: function () { const e = { small: window.matchMedia("(max-width: 734px)"), medium: window.matchMedia("(min-width: 735px) and (max-width: 1068px)"), large: window.matchMedia("(min-width: 1069px)") }; Object.keys(e).forEach(t => { const i = e[t]; "function" != typeof i.addEventListener ? i.addListener(() => { i.matches && this.viewportObserve(t) }) : i.addEventListener("change", () => { i.matches && this.viewportObserve(t) }), i.matches && this.viewportObserve(t) }) }, viewportObserve: function (e) { this.nState = e, this.cState !== this.nState && (this.cState = this.nState, this.dispatch(this.cState)) }, dispatch: function (e) { const t = new CustomEvent("channel:viewport-change", { detail: e }); window.dispatchEvent(t) } }, orientationManager = { orienation: null, init: function () { window.matchMedia("(orientation: portrait)").addEventListener("change", e => { e.matches ? this.orienation = "portrait" : this.orienation = "landscape", this.dispatch(this.orienation) }) }, dispatch: function (e) { const t = new CustomEvent("channel:orientation-change", { detail: e }); window.dispatchEvent(t) } }, selectorManager = { init: function (e, t) { const i = document.querySelectorAll(e); i.forEach((e, t) => { e.addEventListener("change", () => { const r = e.selectedIndex, n = e.value, s = Number(e.options[r].getAttribute("value")); this.dispatch({ elIndex: t, selectedIndex: s, value: n, selectorEls: i }), e.focus() }) }) }, dispatch: function (e) { const t = new CustomEvent("channel:pre-user-select", { detail: e }); window.dispatchEvent(t) } }, buyButtonManager = { buyButtonQuery: null, init: function (e) { this.buyButtonQuery = e, this.addListeners(), this.attachButtonListeners() }, addListeners: function () { window.addEventListener("channel:reorder-dom", () => { this.attachButtonListeners() }) }, attachButtonListeners: function () { document.querySelectorAll(this.buyButtonQuery).forEach(e => { e.addEventListener("click", t => { const i = 0 === t.screenX && 0 === t.screenY ? "Keyboard Interaction" : "Mouse Click"; this.dispatch({ productName: e.id, eventSource: i }) }) }) }, dispatch: function (e) { const t = new CustomEvent("channel:buy-button-click", { detail: e }); window.dispatchEvent(t) } }, dataManager = { order: null, viewportKey: null, viewportOrder: null, viewportMax: null, init: function (e, t) { this.order = e, this.useStatic = t, this.addListeners() }, viewportChange(e) { this.viewportKey = e, this.viewportOrder = this.order[this.viewportKey], this.viewportMax = this.order.max[this.viewportKey], this.dispatch({ order: this.viewportOrder, max: this.viewportMax, useStatic: this.useStatic }) }, blurSelects(e) { document.querySelectorAll(e).forEach(e => { e.blur() }) }, flattenOrders() { this.viewportOrder = this.order[this.viewportKey], this.viewportMax = this.order.max[this.viewportKey], ["small", "medium", "large"].forEach(e => { this.order[e] = this.viewportOrder }) }, getLineupInfo(e, t) { const i = {}; return e.forEach((e, r) => { i[r] = { columnIndex: r, deviceName: e.options[e.selectedIndex].text, hasChanged: r === t } }), i }, userSelect(e) { const { elIndex: t, selectedIndex: i } = e, r = this.viewportOrder[t], n = this.viewportOrder.find(e => e === i), s = this.viewportOrder.indexOf(n); void 0 !== n ? (this.viewportOrder[s] = r, this.viewportOrder[t] = n) : this.viewportOrder[t] = i, this.flattenOrders(), this.dispatch({ order: this.viewportOrder, max: this.viewportMax, useStatic: this.useStatic, selectorIndex: t }), e.deviceLineup = this.getLineupInfo(e.selectorEls, t), delete e.selectorEls; const o = Object.keys(e.deviceLineup).slice(0, this.viewportMax).reduce((t, i) => (t[i] = e.deviceLineup[i], t), {}); this.dispatchPostUserSelect({ deviceLineup: o }) }, addListeners: function () { window.addEventListener("channel:pre-user-select", e => { this.userSelect(e.detail) }), window.addEventListener("channel:user-refresh", e => { this.dispatch({ order: this.viewportOrder, max: this.viewportMax, useStatic: this.useStatic }) }), window.addEventListener("channel:viewport-change", e => { this.viewportChange(e.detail), this.blurSelects(this.selectorElsQuery) }), window.addEventListener("change:orientation-change", () => { this.blurSelects(this.selectorElsQuery) }) }, dispatch: function (e) { const t = new CustomEvent("channel:reorder-dom", { detail: e }); window.dispatchEvent(t) }, dispatchPostUserSelect: function (e) { const t = new CustomEvent("channel:user-select", { detail: e }); window.dispatchEvent(t) } }, channelCompare = { inited: !1, init: function (e = null) { if (this.inited) return; let t; if (this.isDev = window.location.host.indexOf("127.0.0.1") > -1, e) t = e; else if (!e) { const e = document.querySelector("[data-channel-html-compare]"); if (!e) return void console.warn("channelCompare: element[data-channel-html-compare not found]"); try { const i = e.getAttribute("data-channel-html-compare"); t = JSON.parse(i) } catch (e) { return void console.warn("channelCompare: error parsing JSON", e) } } if (t.isConfigurableCompare) { let e = { large: [], medium: [], small: [] }, i = []; const r = document.querySelector("[data-compare-lineup]"); if (r) try { const e = r.getAttribute("data-compare-lineup"), t = JSON.parse(null !== e && void 0 !== e ? e : "{}"); t["apple-compare"] && (i = t["apple-compare"]) } catch (e) { return void console.warn("channelCompare: error parsing JSON", e) } const n = new URL(window.location.toLocaleString()).searchParams; n.get("apple-compare") && (i = n.get("apple-compare").split(",")), Object.keys(e).forEach(t => { var r; e[t] = [...new Set(null !== (r = null === i || void 0 === i ? void 0 : i.map(e => Number(e) - 1)) && void 0 !== r ? r : [])].filter(e => Number(e) >= 0) }), t.order = this.orderOverwrite(t.order, e) } const i = t.order, r = t.headerEl, n = t.selectorEls, s = t.swapEls, o = t.staticEl, a = t.useStatic; reorderDOM.init(s, n, r, o, a), !a && selectorManager.init(n), buyButtonManager.init(".compare-button-3lD13g0t3"), dataManager.init(i, a), viewportManager.init(), orientationManager.init(), this.inited = !0 }, orderOverwrite: function (e, t) { const i = Object.assign({}, e); return Object.keys(t).forEach(e => { const r = i[e].filter(i => !t[e].includes(i)), n = [...t[e], ...r].slice(0, 5); i[e] = n }), i } }; window.addEventListener("pageshow", e => { const { persisted: t } = e; if (t) window.addEventListener("scroll", () => { const e = new CustomEvent("channel:user-refresh"); window.dispatchEvent(e) }); else { channelCompare.init(), document.querySelector(".channel-compare-3lD13g0t3").classList.remove("channel-compare--hidden-3lD13g0t3") } });