InfiniTimeOrg / InfiniTime

Firmware for Pinetime smartwatch written in C++ and based on FreeRTOS
GNU General Public License v3.0
2.69k stars 920 forks source link

Music controls don't work for iOS #460

Open zac-garby opened 3 years ago

zac-garby commented 3 years ago

The music app can't control the iOS Music app. I'm assuming this is just not implemented (yet?), but I thought I'd make an issue in case I'm doing something wrong or I need to set something up in order for it to work.

Otherwise, if it's not implemented yet, are there plans for iOS music controls in the future?

thefenriswolf commented 3 years ago

Which companion app are you using?

Avamander commented 3 years ago

BLE standard doesn't contain one for music control (BT Classic does, but we don't have that), such functionality has to be implemented by the companion app.

zac-garby commented 3 years ago

ah that makes sense. i'm using nRF Connect, but only because afaik it's the only one for iOS

JF002 commented 3 years ago

Indeed, NRFConnect is a generic app that allows to connect to devices, browse their characteristic, debug the connection,... but it does not provide any higher level functionalities like music control, navigation or notifications. Unfortunately, I think there's no companion app compatible with PineTime / InfiniTime on iOS for now. Someone want to fill that gap?

zac-garby commented 3 years ago

if i had more time i'd definitely look into making one. also that explains what the notifications section is for, i take it that the watch can show your phone notifications? if so, i'm not sure if iOS actually allows apps to look at systemwide notifications, i would guess not?

Avamander commented 3 years ago

i'm not sure if iOS actually allows apps to look at systemwide notifications, i would guess not?

You can maybe find the Pebble app's App Store description and see if it implemented it. It might actually be doable, but I haven't personally paid attention.

JF002 commented 3 years ago

I would be surprised if iOS doesn't allow notifications to be sent to any smartwatch, but I don't know much about the Apple world so...

zac-garby commented 3 years ago

yeah looks like it's possible actually, i was just thinking how obsessed apple is with privacy recently

tapresle commented 3 years ago

Pebble used to do notifications on the original Pebble, I never had a Pebble Time or the others so I can't speak to the other functionality. I've actually recently received my InfiniTime and made a quick and dirty app to set the time via iOS. I'll see what's involved in getting notifications and basic music controls working but can't guarantee any timeline.

EDIT: I've looked into it a bit today, iOS is extremely locked down now compared to the days of Pebble so I believe their old way of getting all notifications to the watch has been blocked, @zac-garby if you have a lead send it my way. I've been able to get Apple Music connected to my app to send music info TO the InfiniTime, but not control back yet. I use Spotify personally so I'll see what extra is included to get that hooked up, looks like I need to get into the Spotify SDK and all that.

tapresle commented 3 years ago

I've done some more digging and it looks like Apple Media Service needs to be implemented on the InfiniTime firmware. Similarly, ANCS for notifications. If there's someone more comfortable with editing the firmware to implement those I'd be happy to test, I don't quite have the tools I need to edit firmware yet and it's been almost a decade since I've looked at C/C++ code 😆

computergeek125 commented 2 years ago

Was reminded this issue exists today - I have an iPhone, an unsealed dev watch, a Mac, and probably enough Unix/Linux machines to figure out how to compile Infinitime. I can also help test, but my C/C++ isn't probably up to par for actually writing this

TheAwesome98-Real commented 2 years ago

Old issue but InfiniLink works, but only with Apple Music so far. There was an issue saying system wide media support is coming soon iirc

JF002 commented 2 years ago

Thanks for the info! My understanding is that it works only with the Apple Music app, and this is a limitation of iOS. Other apps would need other BLE services and characteristics to be implemented in InfiniTime.

tapresle commented 2 years ago

Not sure why this was closed but that is correct, as I put in an earlier comment, Apple Media Services would need to be implemented in the Infinitime ble stack itself. I’d help out but unfortunately don’t have the skill set or tools to write and flash code directly to the device.


Ted Presley @. Mobile: (336) 816-2053 tedpresley.com On Jan 1, 2022, 3:33 PM -0500, JF @.>, wrote:

Thanks for the info! My understanding is that it works only with the Apple Music app, and this is a limitation of iOS. Other apps would need other BLE services and characteristics to be implemented in InfiniTime. — Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android. You are receiving this because you commented.Message ID: @.***>

JF002 commented 2 years ago

I closed it because there's nothing we can do in InfiniTime to make iOS compatible with the music control API implemented in InfiniTime.

Ok, I thought this was a "bug" issue, but, as it is a "feature request", I guess I can re-open it, in case someone is willing to implement whatever is necessary for iOS to work correctly :-)

tapresle commented 2 years ago

Implementing the Apple Media Service Bluetooth service is the fix here, it’s what automobile, speaker, etc use after binding to an iOS device. BangleJS which is a similar open wearable has implemented it as well. I’ll see if I can dig in sometime soon with my dev kit after I get what I need to flash the firmware, but it may take a while to get in as I get to speed and as I also need approval for any open source contributions from my employer.


Ted Presley @. Mobile: (336) 816-2053 tedpresley.com On Jan 1, 2022, 5:12 PM -0500, JF @.>, wrote:

I closed it because there's nothing we can do in InfiniTime to make iOS compatible with the music control API implemented in InfiniTime. Ok, I thought this was a "bug" issue, but, as it is a "feature request", I guess I can re-open it, in case someone is willing to implement whatever is necessary for iOS to work correctly :-) — Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android. You are receiving this because you commented.Message ID: @.***>

JF002 commented 2 years ago

I think most of the active developers in InfiniTime do not own an Apple device, and that's probably the main reason why no one has already tried to implement the apple specific protocole.

That would be awesome if you could help on that topic! Feel free to ask for help here on in the community chat rooms if needed :)

jrmolin commented 2 years ago

I have a PineTime, a lot of C/C++ experience, a fair number of Apple products, a lot of GNU/Linux experience, and some free time. I would be happy to look into this, but I am a little hazy on this code base. Could someone point me at the specifications I would need to hit for this to work?

minacode commented 2 years ago

Hi, I tried implementing ANCS once. It seems that AMS has the same implementation issue Source:

Due to the nature of iOS, the AMS is not guaranteed to always be present. As a result, the MR should look for and subscribe to the Service Changed characteristic of the GATT service in order to monitor the potential publishing and unpublishing of the AMS at any time.

Right now, Infinitime does not have support for BLE services that can appear and disappear at any time. Sadly, Apple's Services build heavily on this mechanic. Thus, implementing the GATT service would be a good start. Sadly, I am writing my thesis and don't have time for this right now.

With ANCS and AMS running, the watch would have full support for iOS for everything but navigation, I assume.