Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/build-electron.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:

strategy:
matrix:
os: [ubuntu-latest, macos-13, windows-latest]
os: [ubuntu-latest, macos-14, windows-latest]

steps:
- name: Check out Git repository
Expand Down
17 changes: 9 additions & 8 deletions .github/workflows/build-ios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,27 @@ defaults:
run:
shell: bash

# env:
# CI: ''
# SKIP_SIGNING: true

jobs:
build-mobile:
runs-on: ${{ matrix.os }}

strategy:
# fail-fast: false
matrix:
os: [macos-13]
os: [macos-14]

steps:
- name: check Xcode version
run: /usr/bin/xcodebuild -version

- name: Check out Git repository
uses: actions/checkout@v3

- name: Set up Xcode 16
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16'

- name: Confirm Xcode version
run: xcodebuild -version

- name: Install Node.js, NPM and Yarn
uses: actions/setup-node@v3
with:
Expand Down
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ android {
applicationId "com.remoteit"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 279
versionName "3.37.6"
versionCode 280
versionName "3.38.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
Expand Down
2 changes: 1 addition & 1 deletion backend/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "remoteit-headless",
"version": "3.37.6",
"version": "3.38.0",
"private": true,
"main": "build/index.js",
"scripts": {
Expand Down
4 changes: 2 additions & 2 deletions electron/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion electron/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "remoteit",
"version": "3.37.6",
"version": "3.38.0",
"private": true,
"main": "build/index.js",
"description": "Remote.It cross platform desktop application for creating and hosting connections",
Expand Down
2 changes: 1 addition & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "remoteit-desktop-frontend",
"version": "3.37.6",
"version": "3.38.0",
"private": true,
"type": "module",
"scripts": {
Expand Down
10 changes: 1 addition & 9 deletions frontend/src/components/BluetoothScan.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,7 @@ export const BluetoothScan: React.FC<Props> = ({ className }) => {
>
<Icon name="bluetooth" size="xxl" color="calm" />
</ListItemIcon>
<ListItemText
primary="Setup WiFi"
secondary={
<>
Connect your Pi to Wifi
<br /> and Remote.It
</>
}
/>
<ListItemText primary="Setup WiFi" secondary={<>Connect your Pi to Wifi&nbsp;and&nbsp;Remote.It</>} />
</ListItemButton>
</List>
)
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/DevicesApplicationsTabs.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from 'react'
import isEqual from 'lodash/isEqual'
import isEqual from 'lodash.isequal'
import { Dispatch } from '../store'
import { defaultState } from '../models/devices'
import { useSelector, useDispatch } from 'react-redux'
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/components/Notice.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,11 @@ export const Notice: React.FC<NoticeProps> = ({
}

const useStyles = makeStyles(({ palette }) => ({
info: { color: palette.info.main, backgroundColor: alpha(palette.info.main, 0.1) },
info: { color: palette.calm.main, backgroundColor: alpha(palette.calm.main, 0.1) },
error: { color: palette.error.main, backgroundColor: alpha(palette.error.main, 0.1) },
warning: { color: palette.warning.main, backgroundColor: alpha(palette.warning.main, 0.1) },
success: { color: palette.success.main, backgroundColor: alpha(palette.success.main, 0.1) },
infoSolid: { color: palette.alwaysWhite.main, backgroundColor: palette.info.main },
infoSolid: { color: palette.alwaysWhite.main, backgroundColor: palette.calm.main },
errorSolid: { color: palette.alwaysWhite.main, backgroundColor: palette.error.main },
warningSolid: { color: palette.alwaysWhite.main, backgroundColor: palette.warning.main },
successSolid: { color: palette.alwaysWhite.main, backgroundColor: palette.success.main },
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/components/OnboardRegisteration.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export const OnboardRegistration: React.FC = () => {
{reg === 'REGISTERING' ? (
<CircularProgress size={29.5} thickness={3} />
) : reg !== 'REGISTERED' ? (
<>
<Stack direction="row">
<Button variant="contained" onClick={register} disabled={processing}>
Register
</Button>
Expand All @@ -55,7 +55,7 @@ export const OnboardRegistration: React.FC = () => {
<Button to={id ? `/devices/${id}` : '/devices'} component={Link}>
skip
</Button>
</>
</Stack>
) : (
<Button variant="contained" to={id ? `/devices/${id}` : '/devices'} component={Link} disabled={processing}>
Done
Expand Down
9 changes: 6 additions & 3 deletions frontend/src/components/OnboardWifi.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,16 @@ export const OnboardWifi: React.FC<Props> = ({ next }) => {
}
}, [wlan, ready])

useEffect(() => {
if (networks.length && !form.ssid) {
setForm({ ...form, ssid: networks[0]?.ssid || '' })
}
}, [networks])

const onScan = async event => {
event.stopPropagation()
await dispatch.bluetooth.scanSSIDs()
await dispatch.bluetooth.readSSIDs()
setTimeout(() => {
if (!form.ssid) setForm({ ...form, ssid: networks[0]?.ssid || '' })
}, 500)
}

const onSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
Expand Down
1 change: 1 addition & 0 deletions frontend/src/hooks/useCapacitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ function useCapacitor() {
if (state.isActive) {
network.focus()
setTimeout(() => dispatch.ui.setTheme(undefined), 1000)
if (state.isActive) dispatch.bluetooth.restartNotifications()
}
}

Expand Down
8 changes: 6 additions & 2 deletions frontend/src/hooks/useSafeArea.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { useEffect, useState } from 'react'
import { SafeArea } from 'capacitor-plugin-safe-area'
import { spacing } from '../styling'
import browser from '../services/browser'
import isEqual from 'lodash.isequal'

type UseSafeAreaResult = {
insets: ILayout['insets']
Expand All @@ -28,8 +29,11 @@ const useSafeArea = (): UseSafeAreaResult => {
})

SafeArea.addListener('safeAreaChanged', data => {
console.log('SAFE-AREA CHANGED', data)
setInsets(adjustInsets(data.insets))
const adjustedInsets = adjustInsets(data.insets)
if (!isEqual(insets, adjustedInsets)) {
console.log('SAFE-AREA CHANGED', data)
setInsets(adjustedInsets)
}
})

const fetchInsets = async () => {
Expand Down
23 changes: 15 additions & 8 deletions frontend/src/models/bluetooth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -180,11 +180,6 @@ export default createModel<RootModel>()({
}
},

async reconnect(_: void) {
await dispatch.bluetooth.disconnect()
await dispatch.bluetooth.connect()
},

async notify(characteristic: string, state) {
const notify = new Set(state.bluetooth.notify)
const device = state.bluetooth.device
Expand All @@ -193,7 +188,7 @@ export default createModel<RootModel>()({
try {
if (notify.has(characteristic)) await dispatch.bluetooth.stopNotify(characteristic)
notify.add(characteristic)
console.log('SETUP NOTIFY ON', characteristic)
console.log('START NOTIFY', CHARACTERISTIC_NAMES[characteristic])

await BleClient.startNotifications(device.deviceId, BT_UUIDS.SERVICE, characteristic, async value => {
try {
Expand Down Expand Up @@ -285,13 +280,13 @@ export default createModel<RootModel>()({
const device = state.bluetooth.device
if (!device) return
try {
console.log('STOP NOTIFY', characteristic)
console.log('STOP NOTIFY', CHARACTERISTIC_NAMES[characteristic])
await BleClient.stopNotifications(device.deviceId, BT_UUIDS.SERVICE, characteristic)
notify.delete(characteristic)
await dispatch.bluetooth.set({ notify })
} catch (error) {
console.error('STOP NOTIFY ERROR', error)
}
}
},

async startNotifications(_: void, state) {
Expand Down Expand Up @@ -501,6 +496,18 @@ export default createModel<RootModel>()({
event('BLE_DEVICE_WIFI_LIST', { count: networks.length })
dispatch.bluetooth.set({ networks, scan: 'COMPLETE' })
},

async restartNotifications(_: void, state) {
if (!state.bluetooth.connected || !state.bluetooth.device) return

console.log('RE-ESTABLISHING NOTIFICATIONS')
try {
await dispatch.bluetooth.stopNotifications()
await dispatch.bluetooth.startNotifications()
} catch (error) {
console.error('ERROR RE-ESTABLISHING NOTIFICATIONS', error)
}
},
}),
reducers: {
reset(state: BluetoothState) {
Expand Down
6 changes: 5 additions & 1 deletion frontend/src/pages/Page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export function Page({ children }: Props & React.HTMLProps<HTMLDivElement>) {
const offline = useSelector((state: State) => state.ui.offline)
const layout = useSelector((state: State) => state.ui.layout)

const clearNoticeMessage = () => ui.set({ noticeMessage: undefined })
const clearSuccessMessage = () => ui.set({ successMessage: undefined })
const clearErrorMessage = () => ui.set({ errorMessage: undefined })
const reconnect = () => Controller.open(false, true)
Expand Down Expand Up @@ -100,6 +101,7 @@ export function Page({ children }: Props & React.HTMLProps<HTMLDivElement>) {
open={snackbar === 'error'}
anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}
onClose={clearErrorMessage}
onClick={layout.mobile ? clearErrorMessage : undefined}
message={
<Notice severity="error" invert fullWidth>
{errorMessage}
Expand All @@ -110,7 +112,8 @@ export function Page({ children }: Props & React.HTMLProps<HTMLDivElement>) {
className={css.snackbar}
key="notice"
open={snackbar === 'notice'}
onClose={() => ui.set({ noticeMessage: '' })}
onClose={clearNoticeMessage}
onClick={layout.mobile ? clearNoticeMessage : undefined}
anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}
message={
<Notice severity="info" invert fullWidth>
Expand All @@ -124,6 +127,7 @@ export function Page({ children }: Props & React.HTMLProps<HTMLDivElement>) {
open={snackbar === 'success'}
anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}
onClose={clearSuccessMessage}
onClick={layout.mobile ? clearSuccessMessage : undefined}
message={
<Notice severity="success" invert fullWidth>
{successMessage}
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/styling/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export const lightColors: Colors = {
primaryBackground: '#EAF4FA',
brandPrimary: '#0096e7', // Default to primary, will be overridden by brand config
brandSecondary: '#034b9d', // Default secondary color
calm: '#0082FC',
calm: '#0096e7', //'#0082FC',
successLight: '#a4db4c',
success: '#75bd00',
successDark: '#436807',
Expand Down
24 changes: 15 additions & 9 deletions ios/App/App.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@
504EC3031FED79650016851F = {
CreatedOnToolsVersion = 9.2;
LastSwiftMigration = 1100;
ProvisioningStyle = Automatic;
ProvisioningStyle = Manual;
};
};
};
Expand Down Expand Up @@ -350,19 +350,22 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 132;
DEVELOPMENT_TEAM = NR6A6NQAYW;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 133;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = NR6A6NQAYW;
INFOPLIST_FILE = App/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Remote.It;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 3.37.6;
MARKETING_VERSION = 3.38.0;
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
PRODUCT_BUNDLE_IDENTIFIER = com.remoteit.mobile.ios;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "com-remoteit-mobile-ios-dist";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
Expand All @@ -376,18 +379,21 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 132;
DEVELOPMENT_TEAM = NR6A6NQAYW;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 133;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = NR6A6NQAYW;
INFOPLIST_FILE = App/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Remote.It;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 3.37.6;
MARKETING_VERSION = 3.38.0;
PRODUCT_BUNDLE_IDENTIFIER = com.remoteit.mobile.ios;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "com-remoteit-mobile-ios-dist";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
Expand Down
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading