mirror of
https://github.com/StikDebug/StikDebug.git
synced 2026-10-15 20:10:30 +00:00
* Change default UPLOAD_IPA value to 'false' * Part 1 of the great debloat * Remove Mini Tools, adopt native alerts in StikJITApp, and update HomeView UI * Refactor views to use native SwiftUI alerts instead of CustomErrorView * Update ProfileView to use minimal List UI style with native alerts * Fix up homeview * Squash: Redesign HomeView, remove Feature Flags, enable all tabs, refactor alerts, and updates - Redesign HomeView to a simpler style with 'Enable JIT' action. - Remove 'Help & Info' and 'Quick Launch' from Home. - Fix DDI false positive by starting heartbeat on HomeView appear. - Restore robust DDI checks and update app name to 'StikDebug'. - Remove FeatureFlags and Beta tags; enable 'profiles', 'processes', 'location' tabs by default. - Remove 'Devices' tab; add 'Target Device IP' field in Settings. - Hardcode 'Settings' tab to 4th position. - Refactor 'SettingsView' tab customization to be reorder-only. - Remove 'Appearance' theme section from Settings. - Refactor custom error cards to use native SwiftUI/UIKit alerts across the app (HomeView, ConsoleLogsView, ProfileView, etc). - Restore JS callback support and script execution logic in HomeView. - Add necessary Color extensions. - Update project version to 3.0.0. * Clean up: Remove In-App Purchases, update checker, and unused IPA installer code * delete more bloat * fix build issue * Remove widget to save on App IDs * Attempt heartbeat restart when Enable JIT button is pressed * Get rid of PIP * Update Tab Naming * remove more bloat * final changes for today * Remove unused packages * UX Improvements * revert bundle id * Update README.md * remove old idevice * add updated idevice * Fix ddi false positive errors and add templates for GitHub stuff * Remove more unused stuff. * Fix links and update README content * Update compatibility table in README.md * Improve performance of console logs * Remove old code * Change default UPLOAD_IPA value to 'true' * remove the welcome sheet * import support for .mobiledevicepair * Add back LC JIT stuff * Fix heartbeat issues with LC JIT * update the build yml for nightly stuff * Update README.md * Update README.md * Update GitHub Actions workflow for IPA build * Update GitHub Actions workflow for nightly builds * Add URL scheme to kill tasks stikjit://kill-process?pid=1234 * fix build issues * Added App Intents * Unify the error handling style across the app
95 lines
2.8 KiB
Objective-C
95 lines
2.8 KiB
Objective-C
// Jackson Coxson
|
|
// heartbeat.c
|
|
|
|
#include "idevice.h"
|
|
#include <arpa/inet.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/_types/_u_int64_t.h>
|
|
#include <CoreFoundation/CoreFoundation.h>
|
|
#include <limits.h>
|
|
#include "heartbeat.h"
|
|
#include <pthread.h>
|
|
@import Foundation;
|
|
|
|
int globalHeartbeatToken = 0;
|
|
NSDate* lastHeartbeatDate = nil;
|
|
|
|
void startHeartbeat(IdevicePairingFile* pairing_file, IdeviceProviderHandle** provider, int heartbeatToken, HeartbeatCompletionHandlerC completion) {
|
|
IdeviceProviderHandle* newProvider = *provider;
|
|
IdeviceFfiError* err = nil;
|
|
|
|
struct sockaddr_in addr;
|
|
memset(&addr, 0, sizeof(addr));
|
|
addr.sin_family = AF_INET;
|
|
addr.sin_port = htons(LOCKDOWN_PORT);
|
|
|
|
NSString* deviceIP = [[NSUserDefaults standardUserDefaults] stringForKey:@"customTargetIP"];
|
|
inet_pton(AF_INET, (deviceIP && deviceIP.length > 0) ? [deviceIP UTF8String] : "10.7.0.1", &addr.sin_addr);
|
|
|
|
err = idevice_tcp_provider_new((struct sockaddr *)&addr, pairing_file,
|
|
"ExampleProvider", &newProvider);
|
|
if (err != NULL) {
|
|
completion(err->code, err->message);
|
|
idevice_pairing_file_free(pairing_file);
|
|
idevice_error_free(err);
|
|
return;
|
|
}
|
|
|
|
HeartbeatClientHandle *client = NULL;
|
|
err = heartbeat_connect(newProvider, &client);
|
|
if (err != NULL) {
|
|
completion(err->code, err->message);
|
|
idevice_provider_free(newProvider);
|
|
idevice_error_free(err);
|
|
return;
|
|
}
|
|
|
|
*provider = newProvider;
|
|
|
|
bool completionCalled = false;
|
|
u_int64_t current_interval = 15;
|
|
|
|
while (1) {
|
|
u_int64_t new_interval = 0;
|
|
err = heartbeat_get_marco(client, current_interval, &new_interval);
|
|
if (err != NULL) {
|
|
if (!completionCalled) {
|
|
completion(err->code, err->message);
|
|
}
|
|
heartbeat_client_free(client);
|
|
idevice_error_free(err);
|
|
return;
|
|
}
|
|
|
|
// If a newer heartbeat thread has started, yield to it
|
|
if (heartbeatToken != globalHeartbeatToken) {
|
|
heartbeat_client_free(client);
|
|
return;
|
|
}
|
|
|
|
current_interval = new_interval + 5;
|
|
|
|
err = heartbeat_send_polo(client);
|
|
if (err != NULL) {
|
|
if (!completionCalled) {
|
|
completion(err->code, err->message);
|
|
}
|
|
heartbeat_client_free(client);
|
|
idevice_error_free(err);
|
|
return;
|
|
}
|
|
|
|
if (lastHeartbeatDate && [[NSDate now] timeIntervalSinceDate:lastHeartbeatDate] > current_interval) {
|
|
lastHeartbeatDate = nil;
|
|
return;
|
|
}
|
|
lastHeartbeatDate = [NSDate now];
|
|
|
|
if (!completionCalled) {
|
|
completion(0, "Heartbeat succeeded");
|
|
completionCalled = true;
|
|
}
|
|
}
|
|
}
|