Infini-iOS - an InfiniTime Companion App for iOS

Overview

Infini-iOS - an InfiniTime Companion App for iOS

This is a proof-of-concept, barely-functional iOS application to interact with your PineTime running (at least) InfiniTime 1.3.0 (and maybe more, I haven't tested it against other watches or OSes).

What works:

  • Scan nearby devices and allow the user to select an InfiniTime device to connect to
  • Connect to a PineTime running InfiniTime 1.3.0
  • Set time and date immediately after connection
  • Read heart rate, and subscribe to HRM's notifier for updated values
  • Read battery level, and subscribe to battery level's notifier for updated values
  • Display heart rate, battery level, and connection/bluetooth/scanning status to app main page
  • Music controls on InfiniTime can control Apple Music. I can't access system-level music controls or system volume from within an app, so the controls literally only work on Apple Music.

What sort of works but mostly just sucks:

  • The UI: It's just a proof of concept so far, so I put as little effort as possible into the UI.
  • Notifications: I can send a test notification to the PineTime, but can't send phone notifications to the watch yet. Apple requires the ANCS protocol and bonding to be implemented on the peripheral device, so there's some big hills to climb before notifications are functional.

What's next:

  • Learn anything whatsoever about making an app design in SwiftUI that isn't an awful mess
  • Send notifications to the phone, probably. Might be nice to get a buzz on your phone if the watch disconnects for some reason or if the watch battery is running low
  • User-configurable settings, like enabling or disabling Apple Music controls, notifications, etc
  • Clean everything up. Being my first major foray into larger-scale coding projects, I have not done a great job of compartmentalizing my code, so the BLEManager.swift file is pretty monolithic.
  • Watch navigation app. This is a lower priority to me personally, but I'll definitely give it a shot eventually. Based on how the music control and notifications have gone, I'm guessing there's another proprietary Apple service that will need to be implemented to make this work.

How to try it out:

  • Snag this repo and open it in XCode on a Mac
  • Plug an iPhone into your computer and select it as the build target in XCode
  • Make sure you're signed into your appleID in XCode and that you've done whatever it wants you to do to flag yourself as a code signer
  • Change the code signing information in the Infini-iOS properties:
    • Click the main project in the files sidebar
    • Navigate to the 'Signing and Capabilities' tab
    • Change the 'Team' pulldown to reflect your appleID that you used to sign into XCode
    • Change the Bundle Identifier to match your team
  • Build and run!

Disclaimer

This is the first time I've worked with Swift, SwiftUI, XCode, BLE, or anything else in this application. I take no responsibility for what happens if you interact with this repository in any way. If it breaks your phone, your watch, or your brain, that's on you buddy!

Comments
  • Error when setting time

    Error when setting time

    when I try to sync the time with my pinetime using your app, I get an error message telling me it was not able to do so. Having some logs to peruse could help me debug why!

    Originally posted by @bhibb in https://github.com/xan-m/Infini-iOS/issues/18#issuecomment-927334741

    opened by xan-m 23
  • Can you publish it?

    Can you publish it?

    I 100% understand no longer having time to work on an open source project: I and I'm sure many others deeply appreciate the hard work you've invested so far. Obviously my hope is someone will take over the project in due time, but I was wondering if it would be possible for you to finalize publishing the app, so that we do not lose it in 90 days due to TestFlight. In my case, InfiniLink is the only way I can easily update/interact with my PineTime.

    opened by ocdtrekkie 13
  • Rename project

    Rename project

    After nearly 20 successful releases to TestFlight, Apple just rejected version v0.9.2 because the name contains "iOS". I probably should have guessed they would make a stink about iOS being in the name, but here we are. Name ideas would be very much appreciated!

    I may also take this opportunity to switch version control platforms to something FOSS. I initially put this project on GitHub so it would be easier to refer to the InfiniTime repo if issues came up. However, I've only linked InfiniTime issues twice, and that functionality does not seem to be worth the trade off of using a proprietary version control platform when FOSS ones can do all of the same work.

    Feel free to comment here if you'd prefer for me to stay on GitHub for some reason and I will take that into consideration!

    help wanted good first issue question 
    opened by xan-m 10
  • On boarding connection issue

    On boarding connection issue

    I’ve received a couple reports that the first connection was difficult for some (one user had to restart their phone, another had to try to connect to the device from another computer first)

    I suspect this might be an issue with how the Bluetooth permissions are handled on first boot of the app.

    If you had this issue, please add any information you can to this issue to help me troubleshoot!

    opened by xan-m 10
  • Current firmware update (1.11) hangs

    Current firmware update (1.11) hangs

    Looks like there might be an open PR to update the upstream repo branch - regardless at least a few users are unable to make the latest firmware update as the update just hangs and eventually reports the 'is it a zip' message

    opened by aafishman 8
  • TestFlight availability

    TestFlight availability

    Hi, I don't have a Mac to compile it (but I imagine I could rely on a cloud service for that) and send it on the phone (part which I imagine can't be skipped). I understand that it is experimental software but have you considered sharing it via TestFlight to get feedback? Cheers and thanks for sharing you work.

    opened by Utopiah 7
  • Xcode version incompatibility

    Xcode version incompatibility

    This is not strictly a bug - more of a note. For those of us who are running something older than Big Sur (I'm running Catalina 10.15.7), the latest version of XCode I can run is 12.4 - and that will not accept an iPhone with iOS 14.6 as a target because it is too new. Unfortunately my Mac cannot run Big Sur, which is required for any later version of XCode.

    opened by stefanoaz 7
  • InfiniTime latest release not detected

    InfiniTime latest release not detected

    InfiniLink is not detecting the latest available release of InfiniTime (1.7.0) for me. It sees version 1.6 and updates smoothly but doesn't see the 1.7 release.

    Experiencing this behavior on InfiniLink 0.9.3.

    opened by onigiri070 5
  • New Icon

    New Icon

    Not sure if you’re looking for a new icon, but if you are, I've created one you can use.

    image

    If you need it in a different format, like .SVG, I can send that.

    opened by WowieMan 4
  • Feedback for 0.8.5

    Feedback for 0.8.5

    I recently reported via TestFlight about disconnection issues if I completely close out the Inifini-iOS app, but thats not what this report is about, its to just provide some feedback for the "What to Test".

    • flashing firmware from 1.3.0 to 1.4.0 worked fine, I like the updated UI changes a lot, it does really help
    • the onboarding screen is very helpful, I also like this a lot, please consider keeping it as it is
    • I think the clicking the "Use Current Device for Autoconnect" and "Clear Autoconnect Device" should provide some sort of response other than the current visual one, its hard to know something or what actually happened after clicking it
    • Maybe changing "Use Current Device to Autoconnect" to "Autoconnect Current Device" with a toggle may help know its set, then "Clear Autoconnect Device" when pressed would untoggle it?

    Keep up the awesome work, using and testing this has been great, waited so long for a iOS companion app! I owe you a donation for making the PineTime work for my wife and I finally.

    opened by SwampRabbit 4
  • Ability to send custom notifications

    Ability to send custom notifications

    That would be really great ton be able to send custom notifications to the watch, for test purpose but also for productivity as well : for instance, sending a todo list on the watch to get it stored the whole day would be awesome and quite trivial to implement as far as I understand (an automatic notifications in sent to the device on first connections, and there’s no need to use Apple proprietary tools).

    This was done with GadgetBridge while linked to an android device : 726046BE-5C77-4437-9D3C-FC5A47AE022B

    Thanks in advance

    enhancement 
    opened by marcozer 4
  • App defaults to Russian?

    App defaults to Russian?

    Hey guys, I just installed the App, but it immediately defaulted to Russian. My Russian is pretty bad, and I couldn't find a setting for how to change the language. Uninstalling and reinstalling the App didn't help me so far. Any Ideas?

    opened by AeneasChristodoulou 1
  • support external resources

    support external resources

    as of infinitime 1.11.0, some features require you to upload external resources to the watch. most other companion apps have this, and infinilink would benefit from it too.

    opened by TheAwesome98-Real 0
  • Configurable URL to export sensor data live

    Configurable URL to export sensor data live

    Thanks for the great project and kudos for publishing to the App Store.

    I would like to use data from the watch, e.g IMU or heart rate, for VR and AR applications, in particular to motivate physical activity during a work day for its health benefit. Currently the application gather the data and displays it.

    Could it be possible to provide a URL and then push the data there in a know format, e.g JSON, so that it can be parsed and used? I imagine pushing data from favorites at a specific frequency, e.g 10 times a second that could also be configurable.

    opened by Utopiah 0
  • What is the current state of getting iOS notifications, and third-party music apps to work?

    What is the current state of getting iOS notifications, and third-party music apps to work?

    I'd love to be able to control music on my phone from my pinetime, as well as receive my phones notifications on it, so I'm just curious what the state of getting this working is.

    opened by K4LCIFER 3
  • Secure bonding issue

    Secure bonding issue

    opened by xan-m 0
Releases(0.9.4)
  • 0.9.4(Jan 10, 2022)

    This is a smaller release, mostly to push out some bug fixes. People were experiencing crashes related to the music interface, and that should be fixed now. Also, the steps settings page has been trimmed down to fit smaller displays. Please let me know if you're still having trouble interacting with those pages! I don't have a smaller screen to test on so I need feedback to make improvements there.

    Please note that the secure BLE bonding implemented in v1.8.0 of InfiniTime is not currently compatible with the way that iOS initiates bonding. I am working with the wonderful devs at InfiniTime to sort this out, but in the meantime, your BLE connection to your watch will still be unencrypted.

    Thanks to @wowieman for help with the music app crashes, and thanks to @friendlytsy for creating our first localization! Their hard work has created a foundation for future localizations as well, so if you're willing and able to translate InfiniLink to your language, please let me know and I can get you set up for that!

    Source code(tar.gz)
    Source code(zip)
  • 0.9.3(Nov 12, 2021)

    v0.9.3 includes a long-awaited feature: step counts! Also in this version: an updated logo and improved Apple Music compatibility, both thanks to contributions from @WowieMan on GitHub. Much appreciated!

    Source code(tar.gz)
    Source code(zip)
  • 0.9.2(Oct 27, 2021)

    This update includes a revamped chart filtering screen. Click the gear button to set the date range you’d like!

    This version also marks the change of the app’s name to InfiniLink! That accounts for most of the delay in releasing this version. There was lots of red tape to wade through to satisfy the requirements that Apple suddenly imposed.

    Source code(tar.gz)
    Source code(zip)
  • 0.9.1(Oct 3, 2021)

    v0.9.1 contains some UI changes, an overhaul of the Bluetooth implementation, Debug Mode, and some bug fixes.

    UI Changes:

    • Moved giant disconnect/connect button from the Home screen to side menu. Between InfiniTime 1.6.0's Bluetooth fixes and autoconnect enabled, there are very few reasons to manually disconnect or connect anymore. Let me know if this is a problem or pain point and I can make adjustments.
    • Widened side menu to accommodate larger fonts for accessibility.
    • Added device renaming button to home page.
    • Removed 'status' area from side menu. This section has been redundant for a while, as the whole UI updates when a device is connected, and the whole app doesn't do anything if Bluetooth is turned off.
    • Changed giant 'Select Firmware' button on DFU screen to a button where the selected firmware file goes.
    • Added a small pop-up text bubble if autoconnect is enabled to show when the device is scanning and when it connects.

    Debug Mode:

    • I have been tinkering with a debug mode to see app logs for a while, but decided to leave it out a month or so ago. It ended up being instrumental in solving a tricky bug that occurred when setting the time on the PineTime (thanks again for helping me troubleshoot that @bhibb!). With that in mind, I decided to add it to the app for everyone. To access the logs, enable Debug Mode in the Settings view, and you'll see a link appear that will take you to the log pages.
    • The logs are not persistent, so if you experience a crash, please report it through TestFlight.
    • Bear in mind that the log entries you'll see under the 'App' log section are all for bugs I've found or error messages generated by Swift APIs, so it's not a complete list of every possible scenario.

    Behind the Scenes:

    • Bluetooth refactor! Bluetooth was the first thing I implemented in this app, and the first time I had worked with Swift. Needless to say it was a bit of a rat's nest. It's been tidied up and optimized now, and a lot of mistakes and/or oversights have been corrected.

    Bug Fixes:

    • Fixed notifications somehow still trying to send with a nil value. This should fix a crash that someone reported on TestFlight.
    • Established some functions to handle the logic of how buttons should appear and when they're disabled. This fixes a few edge cases where a button is disabled that shouldn't be disabled, for example.
    • Fixed GitHub API request function. This was calling way too often, to the point that some users might have hit the generous 60-request-per-hour limit. Now the app pulls InfiniTime releases when it starts up, and then disables checks for the next 24 hours. I did not make the timer persistent, so the only way to hit that limit now is to open and close the app 60 times in an hour.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.0(Sep 29, 2021)

    Hey everyone! Lots of big changes in this version, hope you all enjoy. As always, please let me know what you think by leaving GitHub issues, email, Mastodon, Matrix, and of course through TestFlight. It takes a day or so to be validated by Apple before it's pushed out to you, but you should be seeing the update soon.

    What's new in v0.9.0:

    • Tons of UI changes: New 'Home' view features some stats about your watch and the connect/disconnect button. DFU page was cleaned up a little. Color scheme changes were made to improve clarity for light mode users.
    • Chart Persistence: Infini-iOS is now capable of saving chart data as it is generated, and chart data can now be filtered by time. I've set the watch to prune data older than a week for now, but am open to suggestions about this time period
    • Device Naming: Devices can now be named in Infini-iOS! While this name has no effect on the watch, setting a name for the device in Infini-iOS associates the UUID of the watch with the new name. Any time this watch would appear on screen (Home screen, Connect screen, etc), your chosen name will display instead of 'InfiniTime'. Hopefully this will be helpful for those of you that have more than one watch!
    • Arbitrary Notifications: Now you can send arbitrary notifications to your PineTime from the Settings Menu. Have a short list of stuff to get at the store? Send the list as a notification and it will be on your wrist as you shop!
    • Updated DFU process: DFU downloads are now available! Now, when you tap the 'Select Firmware File' button, you're given the option to select a local file or download a firmware file. Tapping the download button uses the GitHub API to bring up a list of firmware files available on GitHub. Selecting a file from that list will download it and prepare it for flashing. After flashing, the file is deleted. Also, when a watch is connected, Infini-iOS will compare the firmware version number on the watch to this list, and notify you of any updates on the Home screen.
    Source code(tar.gz)
    Source code(zip)
  • 0.8.5(Aug 30, 2021)

    Mostly bug fixes and UI updates based on TestFlight and GitHub feedback (thank you!!!)

    • Added a line-only graph for battery and heart rate, and put toggles in the Settings tab to let users select which graph style they prefer
    • Graph displayed on Status page at open is now whatever the last viewed graph was
    • Added some more information to the DFU page. Now the page gives you a big green box that tells you the update was successful, and also returns the page to its default state on completion.
    • Added a cutesy little onboarding screen and added a little bit of buffer to allow the Bluetooth permissions to resolve before starting the first scan ever. This should help with some of the first connection issues that were reported.
    • Fixed a crash that occurred when trying to send non-ASCII characters to the PineTime for notifications, song titles, and artist names. If you notice an artist name or track title that is not displaying, it's because InfiniTime does not support a character in the song's title.
    • Added some error handling to the function that writes the date and time to the watch. I'm not sure how it happened, but a user experienced a crash because this function failed somehow. Now it should show an alert that this function failed and ask you to disconnect/reconnect to the PineTime.
    Source code(tar.gz)
    Source code(zip)
  • 0.8.0(Aug 22, 2021)

Owner
null
Basic iOS app template for Integrate Branch Day.

Integrate-Branch-Day-Template Basic iOS app template for Integrate Branch Day. How to prepare for Integrate Branch Day: Install Xcode via Self Service

null 0 Oct 19, 2021
The goal is a simple iOS app that draws an analog clock of the current time

Qrono This is a work-in-progress. The goal is a simple iOS app that draws an analog clock of the current time (as well as displaying a digital readout

Justin Reusch 2 Jan 29, 2022
Simple clock app for the different time zones.

DunyaSaatleri The clock app provide the user adding clocks of cities from different timezones. The times showed by analog clock. The added clocks can

Ozan Barış GÜNAYDIN 1 Nov 27, 2021
Egg timer app written in Swift

Egg Timer Our Goal This module will be a mix of tutorials and challenges. Most importantly, we want you to get comfortable with looking up how to do s

null 0 Dec 2, 2021
Convergent Demo Day: StepCity mobile app

Convergent Demo Day 2020 Problem: Our daily lives have been upended by the pandemic and it has been harder to motivate ourselves to workout. Dr Dunton

Kelly Chiu 0 Dec 28, 2021
A basic countdown app that allows the user to create, edit, and delete events. Each event contains a live countdown timer to a specified date and time.

Event Countdown App (iOS) Created by Lucas Ausberger About This Project Created: January 4, 2021 Last Updated: January 8, 2021 Current Verison: 1.1.1

Lucas Ausberger 1 Jan 8, 2022
This app will hlep you realize if the job you are doing, truly is worth your time

Worth Your Time Is working for your current pay really worth your time? This app will hlep you realize if the job you are doing, truly is worth your t

Phillip Lundin 2 Mar 1, 2022
SwiftMoment - A time and calendar manipulation library for iOS 9+, macOS 10.11+, tvOS 9+, watchOS 2+ written in Swift 4.

SwiftMoment This framework is inspired by Moment.js. Its objectives are the following: Simplify the manipulation and readability of date and interval

Adrian Kosmaczewski 1.6k Dec 31, 2022
Dates and times made easy in iOS

DateTools DateTools was written to streamline date and time handling in iOS. Classes and concepts from other languages served as an inspiration for Da

Matthew York 7.2k Dec 30, 2022
This Control is a beautiful time-of-day picker heavily inspired by the iOS 10 "Bedtime" timer.

#10Clock Dark and Mysterious ?? Light Colors ?? Usage The control itsself is TenClock. Add that to your view hierarchy, and constrain it to be square

Joe 557 Dec 23, 2022
A "time ago", "time since", "relative date", or "fuzzy date" category for NSDate and iOS, Objective-C, Cocoa Touch, iPhone, iPad

Migration 2014.04.12 NSDate+TimeAgo has merged with DateTools. DateTools is the parent project and Matthew York is the project head. This project is n

Kevin Lawler 1.8k Dec 2, 2022
Better time picker for iOS.

TimePicker Better TimePicker for iOS Requirements Swift 5.0 iOS 10.0+ Xcode 10.2+ Installation The easiest way is through CocoaPods. Simply add the de

Oleh 14 Oct 21, 2022
Timekeeper is an easy-to-use time measurement library written in Swift, with support for iOS, tvOS, watchOS and macOS.

Timekeeper is an easy-to-use time measurement library written in Swift, with support for iOS, tvOS, watchOS and macOS. Installation Timekee

Andreas Pfurtscheller 1 Oct 18, 2021
UmaBasicAlertKit is a Swift UI library for iOS

UmaBasicAlertKit UmaBasicAlertKit is a Swift UI library for iOS. This library al

UmaKim 3 Jan 28, 2022
NasaApod - iOS, Swift, MVVM, Consuming NASA Astronomy Picture of the Day API for any selected date

NasaApod iOS, Swift, MVVM, Unit Tests Consuming NASA Astronomy Picture of the Da

Vishal Singh 1 Jan 10, 2022
Population Clock is an iOS tool for learning about geography and demographics.

PopulationClock Population Clock is an iOS tool for learning about geography and demographics. Download app on iTunes The project uses the most recent

Netfilter 12 Feb 8, 2022
A clock for iOS based off of the famous fibonacci sequence

Fibonacc iClock Fibonacc iClock is a fibonacci clock implementation for iOS. This project is based off of Thiago Sá's implementation of Philippe Chrét

null 10 Dec 16, 2022
Date and time manager for iOS/OSX written in Swift

Tempo was designed to work both in OSX and in iOS (7.0+). Work with the time or dates can be cumbersome, iOS development. Tempo allows you to deal easly with date and time. Basics manipulations are already implemented in Tempo.

Remi ROBERT 153 Jun 3, 2021
iOS Companion App for PineTime

InfiniLink - an InfiniTime Companion App for iOS This iOS application allows you to interact with your PineTime smartwatch running InfiniTime (and per

null 142 Dec 28, 2022
Animal Crossing New Horizon companion app in SwiftUI

You can now download the app on the App Store! The best Animal Crossing New Horizons companion app! 最高の「あつまれ どうぶつの森」コンパニオンアプリ Animal Crossing New Hori

Thomas Ricouard 1.6k Dec 29, 2022