diff --git a/Classes/ChatConversationView.h b/Classes/ChatConversationView.h index 9e62f09c4..7a264ca8e 100644 --- a/Classes/ChatConversationView.h +++ b/Classes/ChatConversationView.h @@ -40,6 +40,7 @@ @property(nonatomic) LinphoneChatRoom *chatRoom; @property(nonatomic) LinphoneChatRoomCbs *chatRoomCbs; +@property(nonatomic) Boolean markAsRead; @property(weak, nonatomic) IBOutlet UIIconButton *backButton; @property(nonatomic, strong) IBOutlet ChatConversationTableView *tableController; diff --git a/Classes/ChatConversationView.m b/Classes/ChatConversationView.m index 7368d9e07..bf5dd6555 100644 --- a/Classes/ChatConversationView.m +++ b/Classes/ChatConversationView.m @@ -85,7 +85,7 @@ static UICompositeViewDescription *compositeDescription = nil; - (void)viewDidLoad { [super viewDidLoad]; - + _markAsRead = TRUE; // if we use fragments, remove back button if (IPAD) { _backButton.hidden = YES; @@ -247,8 +247,10 @@ static UICompositeViewDescription *compositeDescription = nil; } - (void)applicationWillEnterForeground:(NSNotification *)notif { - if (_chatRoom) + if (_chatRoom && _markAsRead) [ChatConversationView markAsRead:_chatRoom]; + + _markAsRead = TRUE; } - (void)callUpdateEvent:(NSNotification *)notif { @@ -826,6 +828,7 @@ void on_chat_room_chat_message_sent(LinphoneChatRoom *cr, const LinphoneEventLog ChatConversationView *view = (__bridge ChatConversationView *)linphone_chat_room_cbs_get_user_data(linphone_chat_room_get_current_callbacks(cr)); [view.tableController addEventEntry:(LinphoneEventLog *)event_log]; [view.tableController scrollToBottom:true]; + [ChatsListTableView saveDataToUserDefaults]; if (IPAD) [NSNotificationCenter.defaultCenter postNotificationName:kLinphoneMessageReceived object:view]; diff --git a/Classes/ChatsListTableView.h b/Classes/ChatsListTableView.h index ed79f82f2..cfab007de 100644 --- a/Classes/ChatsListTableView.h +++ b/Classes/ChatsListTableView.h @@ -30,4 +30,5 @@ - (void)loadData; - (void)markCellAsRead:(LinphoneChatRoom *)chatRoom; ++ (void)saveDataToUserDefaults; @end diff --git a/Classes/ChatsListTableView.m b/Classes/ChatsListTableView.m index 49e3b98d7..4264087b9 100644 --- a/Classes/ChatsListTableView.m +++ b/Classes/ChatsListTableView.m @@ -123,6 +123,55 @@ static int sorted_history_comparison(LinphoneChatRoom *to_insert, LinphoneChatRo } } ++ (void) saveDataToUserDefaults { + NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.belledonne-communications.linphone.widget"]; + MSList *sorted = nil; + const MSList *unsorted = linphone_core_get_chat_rooms(LC); + const MSList *iter = unsorted; + + while (iter) { + // store last message in user data + LinphoneChatRoom *chat_room = iter->data; + sorted = bctbx_list_insert_sorted(sorted, chat_room, (bctbx_compare_func)sorted_history_comparison); + iter = iter->next; + } + + NSMutableArray *addresses = [NSMutableArray array]; + + while (sorted) { + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + LinphoneChatRoom *cr = sorted->data; + const LinphoneAddress *peer_address = linphone_chat_room_get_peer_address(cr); + const LinphoneAddress *local_address = linphone_chat_room_get_local_address(cr); + NSString *display; + [dict setObject:[NSString stringWithUTF8String:linphone_address_as_string_uri_only(peer_address)] + forKey:@"peer"]; + [dict setObject:[NSString stringWithUTF8String:linphone_address_as_string_uri_only(local_address)] + forKey:@"local"]; + if (linphone_chat_room_get_conference_address(cr)) + display = [NSString stringWithUTF8String:linphone_chat_room_get_subject(cr)]; + else { + display = [NSString stringWithUTF8String:linphone_address_get_display_name(peer_address)?:linphone_address_get_username(peer_address)]; + if ([FastAddressBook imageForAddress:peer_address]) + [dict setObject:UIImageJPEGRepresentation([UIImage resizeImage:[FastAddressBook imageForAddress:peer_address] + withMaxWidth:200 + andMaxHeight:200], + 1) + forKey:@"img"]; + } + [dict setObject:display + forKey:@"display"]; + [dict setObject:[NSNumber numberWithBool:linphone_chat_room_get_conference_address(cr)] + forKey:@"nbParticipants"]; + [addresses addObject:dict]; + if (addresses.count >= 4) //send no more data than needed + break; + sorted = sorted->next; + } + + [defaults setObject:addresses forKey:@"chatrooms"]; +} + - (void)markCellAsRead:(LinphoneChatRoom *)chatRoom { int idx = bctbx_list_index(_data, VIEW(ChatConversationView).chatRoom); NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0]; diff --git a/Classes/HistoryListTableView.h b/Classes/HistoryListTableView.h index 1285997be..c6a49334c 100644 --- a/Classes/HistoryListTableView.h +++ b/Classes/HistoryListTableView.h @@ -29,4 +29,5 @@ @property(strong, nonatomic) NSMutableDictionary *sections; @property(strong, nonatomic) NSMutableArray *sortedDays; ++ (void) saveDataToUserDefaults; @end diff --git a/Classes/HistoryListTableView.m b/Classes/HistoryListTableView.m index 5617e7895..4961d6b21 100644 --- a/Classes/HistoryListTableView.m +++ b/Classes/HistoryListTableView.m @@ -158,7 +158,7 @@ [self computeSections]; [super loadData]; - + if (IPAD) { if (![self selectFirstRow]) { HistoryDetailsView *view = VIEW(HistoryDetailsView); @@ -167,6 +167,64 @@ } } ++ (void) saveDataToUserDefaults { + const bctbx_list_t *logs = linphone_core_get_call_logs(LC); + NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName: @"group.belledonne-communications.linphone.widget"]; + NSMutableArray *logsShare = [NSMutableArray array]; + NSMutableDictionary *tmpStoreDict = [NSMutableDictionary dictionary]; + NSMutableArray *addedContacts = [NSMutableArray array]; + while (logs) { + LinphoneCallLog *log = (LinphoneCallLog *)logs->data; + const LinphoneAddress *address = linphone_call_log_get_remote_address(log); + + // if contact is already to be display, skip + if ([addedContacts containsObject:[NSString stringWithUTF8String:linphone_address_as_string_uri_only(address)]]) { + logs = bctbx_list_next(logs); + continue; + } + // if null log id, skip + if (!linphone_call_log_get_call_id(log)) { + logs = bctbx_list_next(logs); + continue; + } + + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + + [dict setObject:[NSString stringWithUTF8String:linphone_call_log_get_call_id(log)] + forKey:@"id"]; + [dict setObject:[NSString stringWithUTF8String:linphone_address_get_display_name(address)?:linphone_address_get_username(address)] + forKey:@"display"]; + UIImage *avatar = [FastAddressBook imageForAddress:address]; + if (avatar) { + UIImage *image = [UIImage resizeImage:avatar + withMaxWidth:200 + andMaxHeight:200]; + NSData *imageData = UIImageJPEGRepresentation(image, 1); + [dict setObject:imageData + forKey:@"img"]; + } + [tmpStoreDict setObject:dict + forKey:[NSDate dateWithTimeIntervalSince1970:linphone_call_log_get_start_date(log)]]; + [addedContacts addObject:[NSString stringWithUTF8String:linphone_address_as_string_uri_only(address)]]; + + logs = bctbx_list_next(logs); + } + + NSArray *sortedDates = [[NSMutableArray alloc] + initWithArray:[tmpStoreDict.allKeys sortedArrayUsingComparator:^NSComparisonResult(NSDate *d1, NSDate *d2) { + return [d2 compare:d1]; + }]]; + + // sort logs array on date + for (NSDate *date in sortedDates) { + [logsShare addObject:[tmpStoreDict objectForKey:date]]; + if (logsShare.count >= 4) //send no more data than needed + break; + } + + [mySharedDefaults setObject:logsShare forKey:@"logs"]; +} + - (void)computeSections { NSArray *unsortedDays = [self.sections allKeys]; _sortedDays = [[NSMutableArray alloc] diff --git a/Classes/LinphoneAppDelegate.m b/Classes/LinphoneAppDelegate.m index 85ab37dea..205e23b2a 100644 --- a/Classes/LinphoneAppDelegate.m +++ b/Classes/LinphoneAppDelegate.m @@ -139,6 +139,8 @@ } } [LinphoneManager.instance.iapManager check]; + [HistoryListTableView saveDataToUserDefaults]; + [ChatsListTableView saveDataToUserDefaults]; } #pragma deploymate push "ignored-api-availability" @@ -340,16 +342,39 @@ [PhoneMainView.instance presentViewController:errView animated:YES completion:nil]; } else if([[url scheme] isEqualToString:@"message-linphone"]) { [PhoneMainView.instance popToView:ChatsListView.compositeViewDescription]; - }else { - if ([[url scheme] isEqualToString:@"sip"]) { - // remove "sip://" from the URI, and do it correctly by taking resourceSpecifier and removing leading and - // trailing "/" - NSString *sipUri = [[url resourceSpecifier] - stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; - [VIEW(DialerView) setAddress:sipUri]; - } - } - return YES; + } else if ([scheme isEqualToString:@"sip"]) { + // remove "sip://" from the URI, and do it correctly by taking resourceSpecifier and removing leading and + // trailing "/" + NSString *sipUri = [[url resourceSpecifier] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; + [VIEW(DialerView) setAddress:sipUri]; + } else if ([scheme isEqualToString:@"linphone-widget"]) { + if ([[url host] isEqualToString:@"call_log"] && + [[url path] isEqualToString:@"/show"]) { + [VIEW(HistoryDetailsView) setCallLogId:[url query]]; + [PhoneMainView.instance changeCurrentView:HistoryDetailsView.compositeViewDescription]; + } else if ([[url host] isEqualToString:@"chatroom"] && [[url path] isEqualToString:@"/show"]) { + NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url + resolvingAgainstBaseURL:NO]; + NSArray *queryItems = urlComponents.queryItems; + NSString *peerAddress = [self valueForKey:@"peer" fromQueryItems:queryItems]; + NSString *localAddress = [self valueForKey:@"local" fromQueryItems:queryItems]; + LinphoneAddress *peer = linphone_address_new(peerAddress.UTF8String); + LinphoneAddress *local = linphone_address_new(localAddress.UTF8String); + LinphoneChatRoom *cr = linphone_core_find_chat_room(LC, peer, local); + linphone_address_unref(peer); + linphone_address_unref(local); + // TODO : Find a better fix + VIEW(ChatConversationView).markAsRead = FALSE; + [PhoneMainView.instance goToChatRoom:cr]; + } + } + return YES; +} + +- (NSString *)valueForKey:(NSString *)key fromQueryItems:(NSArray *)queryItems { + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name=%@", key]; + NSURLQueryItem *queryItem = [[queryItems filteredArrayUsingPredicate:predicate] firstObject]; + return queryItem.value; } - (void)fixRing { diff --git a/Classes/LinphoneManager.m b/Classes/LinphoneManager.m index 33deccc6d..485fde3d9 100644 --- a/Classes/LinphoneManager.m +++ b/Classes/LinphoneManager.m @@ -719,6 +719,7 @@ static void linphone_iphone_display_status(struct _LinphoneCore *lc, const char // Disable speaker when no more call if ((state == LinphoneCallEnd || state == LinphoneCallError)) { + [HistoryListTableView saveDataToUserDefaults]; [[UIDevice currentDevice] setProximityMonitoringEnabled:FALSE]; speaker_already_enabled = FALSE; if (linphone_core_get_calls_nb(theLinphoneCore) == 0) { @@ -1242,6 +1243,8 @@ static void linphone_iphone_popup_password_request(LinphoneCore *lc, LinphoneAut } }]; } + [ChatsListTableView saveDataToUserDefaults]; + [HistoryListTableView saveDataToUserDefaults]; } static void linphone_iphone_message_received(LinphoneCore *lc, LinphoneChatRoom *room, LinphoneChatMessage *message) { @@ -1830,7 +1833,10 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach [self enableProxyPublish:([UIApplication sharedApplication].applicationState == UIApplicationStateActive)]; - LOGI(@"Linphone [%s] started on [%s]", linphone_core_get_version(), [[UIDevice currentDevice].model UTF8String]); + //update UserDefaults for widgets + [HistoryListTableView saveDataToUserDefaults]; + + LOGI(@"Linphone [%s] started on [%s]", linphone_core_get_version(), [[UIDevice currentDevice].model UTF8String]); // Post event NSDictionary *dict = [NSDictionary dictionaryWithObject:[NSValue valueWithPointer:theLinphoneCore] forKey:@"core"]; diff --git a/Classes/Utils/Utils.h b/Classes/Utils/Utils.h index 97e1bacad..ced7d6937 100644 --- a/Classes/Utils/Utils.h +++ b/Classes/Utils/Utils.h @@ -68,6 +68,7 @@ typedef enum { - (UIImage *)squareCrop; - (UIImage *)scaleToSize:(CGSize)size squared:(BOOL)squared; ++ (UIImage *)resizeImage:(UIImage *)image withMaxWidth:(float)maxWidth andMaxHeight:(float)maxHeight; @end diff --git a/Classes/Utils/Utils.m b/Classes/Utils/Utils.m index 1849b361f..4a1d0703c 100644 --- a/Classes/Utils/Utils.m +++ b/Classes/Utils/Utils.m @@ -649,6 +649,36 @@ return scaledImage; } ++ (UIImage *)resizeImage:(UIImage *)image withMaxWidth:(float)maxWidth andMaxHeight:(float)maxHeight { + float actualHeight = image.size.height; + float actualWidth = image.size.width; + float imgRatio = actualWidth / actualHeight; + float maxRatio = maxWidth / maxHeight; + float compressionQuality = 1; + if (actualHeight > maxHeight || actualWidth > maxWidth) + { + if (imgRatio < maxRatio) { + imgRatio = maxHeight / actualHeight; + actualWidth = imgRatio * actualWidth; + actualHeight = maxHeight; + } else if (imgRatio > maxRatio) { + imgRatio = maxWidth / actualWidth; + actualHeight = imgRatio * actualHeight; + actualWidth = maxWidth; + } else { + actualHeight = maxHeight; + actualWidth = maxWidth; + } + } + CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight); + UIGraphicsBeginImageContext(rect.size); + [image drawInRect:rect]; + UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); + NSData *imageData = UIImageJPEGRepresentation(img, compressionQuality); + UIGraphicsEndImageContext(); + return [UIImage imageWithData:imageData]; +} + @end @implementation UIColor (LightAndDark) diff --git a/latestCallsWidget/Base.lproj/MainInterface.storyboard b/latestCallsWidget/Base.lproj/MainInterface.storyboard new file mode 100644 index 000000000..1e3f45eed --- /dev/null +++ b/latestCallsWidget/Base.lproj/MainInterface.storyboard @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/latestCallsWidget/Info.plist b/latestCallsWidget/Info.plist new file mode 100644 index 000000000..e1db1a68f --- /dev/null +++ b/latestCallsWidget/Info.plist @@ -0,0 +1,31 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Linphone - Latest Calls + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSExtension + + NSExtensionMainStoryboard + MainInterface + NSExtensionPointIdentifier + com.apple.widget-extension + + + diff --git a/latestCallsWidget/TodayViewController.h b/latestCallsWidget/TodayViewController.h new file mode 100644 index 000000000..4326afe14 --- /dev/null +++ b/latestCallsWidget/TodayViewController.h @@ -0,0 +1,20 @@ +// +// TodayViewController.h +// latestCallsWidget +// +// Created by David Idmansour on 06/06/2018. +// + +#import + +@interface TodayViewController : UIViewController +@property (strong, nonatomic) IBOutletCollection(UIStackView) NSArray *stackViews; +@property (strong, nonatomic) NSMutableArray *imgs; +@property (strong, nonatomic) NSMutableArray *logIds; +@property (strong, nonatomic) NSMutableArray *displayNames; + +- (IBAction)firstButtonTapped; +- (IBAction)secondButtonTapped; +- (IBAction)thirdButtonTapped; +- (IBAction)fourthButtonTapped; +@end diff --git a/latestCallsWidget/TodayViewController.m b/latestCallsWidget/TodayViewController.m new file mode 100644 index 000000000..7b5400081 --- /dev/null +++ b/latestCallsWidget/TodayViewController.m @@ -0,0 +1,109 @@ +// +// TodayViewController.m +// latestCallsWidget +// +// Created by David Idmansour on 06/06/2018. +// + +#import "TodayViewController.h" +#import + +@interface TodayViewController () + +@end + +@implementation TodayViewController + +- (void)loadData { + NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName: @"group.belledonne-communications.linphone.widget"]; + [_imgs removeAllObjects]; + [_logIds removeAllObjects]; + [_displayNames removeAllObjects]; + NSMutableArray *logs = [NSMutableArray arrayWithArray:[mySharedDefaults objectForKey:@"logs"]]; + for (NSDictionary *dict in logs) { + [_logIds addObject:[dict objectForKey:@"id"]]; + [_displayNames addObject:[dict objectForKey:@"display"]]; + [_imgs addObject:[dict objectForKey:@"img"]?:[NSNull null]]; + } +} + +- (void)draw { + int i = 0; + for (i = 0 ; i < 4 && i < _logIds.count ; i++) { + UIStackView *stack = _stackViews[i]; + UIButton *button = stack.subviews[0]; + UILabel *name = stack.subviews[1]; + if (_imgs[i] != [NSNull null]) { + [button setImage:[UIImage imageWithData:_imgs[i]] forState:UIControlStateNormal]; + } + [stack setAlpha:1]; + button.enabled = YES; + [name setText:_displayNames[i]]; + } + + while (i < 4) { + UIStackView *stack = _stackViews[i]; + UIButton *button = stack.subviews[0]; + [stack setAlpha:0]; + button.enabled = NO; + i++; + } +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + for (UIStackView *stack in _stackViews) { + UIButton *button = stack.subviews[0]; + // making rounded image + UIImageView *imageView = button.imageView; + imageView.layer.cornerRadius = imageView.frame.size.height / 2; + imageView.clipsToBounds = YES; + } + _logIds = [NSMutableArray array]; + _imgs = [NSMutableArray array]; + _displayNames = [NSMutableArray array]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. + [_imgs removeAllObjects]; +} + +- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler { + // Perform any setup necessary in order to update the view. + + // If an error is encountered, use NCUpdateResultFailed + // If there's no update required, use NCUpdateResultNoData + // If there's an update, use NCUpdateResultNewData + [self loadData]; + [self draw]; + completionHandler(NCUpdateResultNewData); +} + +- (void)launchAppWithURL:(NSURL *) url { + [self.extensionContext openURL:url + completionHandler:nil]; +} + +- (void)launchOnHistoryDetailsWithId:(NSString *)logId { + [self launchAppWithURL:[NSURL URLWithString:[@"linphone-widget://call_log/show?" stringByAppendingString:logId]]]; +} + +- (IBAction)firstButtonTapped { + [self launchOnHistoryDetailsWithId:_logIds[0]]; +} + +- (IBAction)secondButtonTapped { + [self launchOnHistoryDetailsWithId:_logIds[1]]; +} + +- (IBAction)thirdButtonTapped { + [self launchOnHistoryDetailsWithId:_logIds[2]]; +} + +- (IBAction)fourthButtonTapped { + [self launchOnHistoryDetailsWithId:_logIds[3]]; +} +@end diff --git a/latestCallsWidget/latestCallsWidget.entitlements b/latestCallsWidget/latestCallsWidget.entitlements new file mode 100644 index 000000000..eae1fdc31 --- /dev/null +++ b/latestCallsWidget/latestCallsWidget.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.belledonne-communications.linphone.widget + + + diff --git a/latestChatroomsWidget/Base.lproj/MainInterface.storyboard b/latestChatroomsWidget/Base.lproj/MainInterface.storyboard new file mode 100644 index 000000000..33db1d1a6 --- /dev/null +++ b/latestChatroomsWidget/Base.lproj/MainInterface.storyboard @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/latestChatroomsWidget/Info.plist b/latestChatroomsWidget/Info.plist new file mode 100644 index 000000000..43f038dd9 --- /dev/null +++ b/latestChatroomsWidget/Info.plist @@ -0,0 +1,31 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Linphone - Latest Chatrooms + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSExtension + + NSExtensionMainStoryboard + MainInterface + NSExtensionPointIdentifier + com.apple.widget-extension + + + diff --git a/latestChatroomsWidget/TodayViewController.h b/latestChatroomsWidget/TodayViewController.h new file mode 100644 index 000000000..7ce90f598 --- /dev/null +++ b/latestChatroomsWidget/TodayViewController.h @@ -0,0 +1,22 @@ +// +// TodayViewController.h +// latestChatroomsWidget +// +// Created by David Idmansour on 18/06/2018. +// + +#import + +@interface TodayViewController : UIViewController +@property (strong, nonatomic) IBOutletCollection(UIStackView) NSArray *stackViews; +@property (strong, nonatomic) NSMutableArray *addresses; +@property (strong, nonatomic) NSMutableArray *localAddress; +@property (strong, nonatomic) NSMutableArray *displayNames; +@property (strong, nonatomic) NSMutableArray *isConf; +@property (strong, nonatomic) NSMutableArray *imgs; + +- (IBAction)firstButtonTapped; +- (IBAction)secondButtonTapped; +- (IBAction)thirdButtonTapped; +- (IBAction)fourthButtonTapped; +@end diff --git a/latestChatroomsWidget/TodayViewController.m b/latestChatroomsWidget/TodayViewController.m new file mode 100644 index 000000000..4686acab0 --- /dev/null +++ b/latestChatroomsWidget/TodayViewController.m @@ -0,0 +1,119 @@ +// +// TodayViewController.m +// latestChatroomsWidget +// +// Created by David Idmansour on 18/06/2018. +// + +#import "TodayViewController.h" +#import + +@interface TodayViewController () + +@end + +@implementation TodayViewController + +- (void)loadData { + NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName: @"group.belledonne-communications.linphone.widget"]; + [_imgs removeAllObjects]; + [_addresses removeAllObjects]; + [_localAddress removeAllObjects]; + [_displayNames removeAllObjects]; + [_isConf removeAllObjects]; + NSMutableArray *chatrooms = [NSMutableArray arrayWithArray:[mySharedDefaults objectForKey:@"chatrooms"]]; + for (NSDictionary *dict in chatrooms) { + [_addresses addObject:[dict objectForKey:@"peer"]]; + [_localAddress addObject:[dict objectForKey:@"local"]]; + [_displayNames addObject:[dict objectForKey:@"display"]]; + [_isConf addObject:(NSNumber *)[dict objectForKey:@"nbParticipants"]]; + [_imgs addObject:[dict objectForKey:@"img"]?:[NSNull null]]; + } +} + +- (void)draw { + int i = 0; + for (i = 0 ; i < 4 && i < _addresses.count ; i++) { + UIStackView *stack = _stackViews[i]; + UIButton *button = stack.subviews[0]; + UILabel *name = stack.subviews[1]; + if (_imgs[i] != [NSNull null]) { + [button setImage:[UIImage imageWithData:_imgs[i]] forState:UIControlStateNormal]; + } else if (((NSNumber *)_isConf[i]).boolValue) { + [button setImage:[UIImage imageNamed:@"chat_group_avatar.png"] forState:UIControlStateNormal]; + } + [stack setAlpha:1]; + button.enabled = YES; + [name setText:_displayNames[i]]; + } + + while (i < 4) { + UIStackView *stack = _stackViews[i]; + UIButton *button = stack.subviews[0]; + [stack setAlpha:0]; + button.enabled = NO; + i++; + } +} + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + for (UIStackView *stack in _stackViews) { + UIButton *button = stack.subviews[0]; + // making rounded image + UIImageView *imageView = button.imageView; + imageView.layer.cornerRadius = imageView.frame.size.height / 2; + imageView.clipsToBounds = YES; + } + + _addresses = [NSMutableArray array]; + _localAddress = [NSMutableArray array]; + _displayNames = [NSMutableArray array]; + _imgs = [NSMutableArray array]; + _isConf = [NSMutableArray array]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. + [_imgs removeAllObjects]; +} + +- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler { + // Perform any setup necessary in order to update the view. + + // If an error is encountered, use NCUpdateResultFailed + // If there's no update required, use NCUpdateResultNoData + // If there's an update, use NCUpdateResultNewData + [self loadData]; + [self draw]; + + completionHandler(NCUpdateResultNewData); +} + +- (void)launchAppWithURL:(NSURL *) url { + [self.extensionContext openURL:url + completionHandler:nil]; +} + +- (void)launchOnChatConversationViewWithPeerAddress:(NSString *)peerAddress andLocalAddress:(NSString *)localAddress { + [self launchAppWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"linphone-widget://chatroom/show?peer=%@&local=%@", peerAddress, localAddress]]]; +} + +- (IBAction)firstButtonTapped { + [self launchOnChatConversationViewWithPeerAddress:_addresses[0] andLocalAddress:_localAddress[0]]; +} + +- (IBAction)secondButtonTapped { + [self launchOnChatConversationViewWithPeerAddress:_addresses[1] andLocalAddress:_localAddress[1]]; +} + +- (IBAction)thirdButtonTapped { + [self launchOnChatConversationViewWithPeerAddress:_addresses[2] andLocalAddress:_localAddress[2]]; +} + +- (IBAction)fourthButtonTapped { + [self launchOnChatConversationViewWithPeerAddress:_addresses[3] andLocalAddress:_localAddress[3]]; +} +@end diff --git a/latestChatroomsWidget/latestChatroomsWidget.entitlements b/latestChatroomsWidget/latestChatroomsWidget.entitlements new file mode 100644 index 000000000..eae1fdc31 --- /dev/null +++ b/latestChatroomsWidget/latestChatroomsWidget.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.belledonne-communications.linphone.widget + + + diff --git a/linphone-Info.plist b/linphone-Info.plist index 59258204f..6be28d3be 100644 --- a/linphone-Info.plist +++ b/linphone-Info.plist @@ -63,6 +63,18 @@ message-linphone + + CFBundleTypeRole + Viewer + CFBundleURLIconFile + linphone_icon_72@2x + CFBundleURLName + org.linphone.phone + CFBundleURLSchemes + + linphone-widget + + CFBundleVersion 0 diff --git a/linphone.entitlements b/linphone.entitlements index b579b2b0d..371282fab 100644 --- a/linphone.entitlements +++ b/linphone.entitlements @@ -6,6 +6,7 @@ development com.apple.security.application-groups + group.belledonne-communications.linphone.widget group.belledonne-communications.linphone diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 4ba735881..6130a12db 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -66,6 +66,18 @@ 61AE365220C00B370089D9D3 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 61AE365020C00B370089D9D3 /* MainInterface.storyboard */; }; 61AE365620C00B370089D9D3 /* linphoneExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 61AE364B20C00B370089D9D3 /* linphoneExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 61F1997520C6B1D5006B069A /* AVKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61F1996E20C6B1D5006B069A /* AVKit.framework */; }; + 5E10ED4820D00630002BF6FE /* avatar.png in Resources */ = {isa = PBXBuildFile; fileRef = 633FEBE61D3CD5570014B822 /* avatar.png */; }; + 5E10ED4920D006C9002BF6FE /* chat_group_avatar.png in Resources */ = {isa = PBXBuildFile; fileRef = 8C2A81941F87B8000012A66B /* chat_group_avatar.png */; }; + 5E31290120D7A37E00CF3AAE /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EF0C33820C806A5005081B0 /* NotificationCenter.framework */; }; + 5E31290520D7A37E00CF3AAE /* TodayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E31290420D7A37E00CF3AAE /* TodayViewController.m */; }; + 5E31290820D7A37E00CF3AAE /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5E31290620D7A37E00CF3AAE /* MainInterface.storyboard */; }; + 5E31290C20D7A37E00CF3AAE /* latestChatroomsWidget.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 5E31290020D7A37E00CF3AAE /* latestChatroomsWidget.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 5E31291320D7AAA100CF3AAE /* avatar.png in Resources */ = {isa = PBXBuildFile; fileRef = 633FEBE61D3CD5570014B822 /* avatar.png */; }; + 5E31291A20D7AAAD00CF3AAE /* chat_group_avatar.png in Resources */ = {isa = PBXBuildFile; fileRef = 8C2A81941F87B8000012A66B /* chat_group_avatar.png */; }; + 5EEE8F9B20C80C23006E4176 /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EF0C33820C806A5005081B0 /* NotificationCenter.framework */; }; + 5EEE8F9F20C80C23006E4176 /* TodayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EEE8F9E20C80C23006E4176 /* TodayViewController.m */; }; + 5EEE8FA220C80C23006E4176 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5EEE8FA020C80C23006E4176 /* MainInterface.storyboard */; }; + 5EEE8FA620C80C23006E4176 /* latestCallsWidget.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 5EEE8F9A20C80C23006E4176 /* latestCallsWidget.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 630589E71B4E810900EFAE36 /* ChatTester.m in Sources */ = {isa = PBXBuildFile; fileRef = 630589DF1B4E810900EFAE36 /* ChatTester.m */; }; 630589E81B4E810900EFAE36 /* ContactsTester.m in Sources */ = {isa = PBXBuildFile; fileRef = 630589E11B4E810900EFAE36 /* ContactsTester.m */; }; 630589EA1B4E810900EFAE36 /* LinphoneTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 630589E41B4E810900EFAE36 /* LinphoneTestCase.m */; }; @@ -822,6 +834,20 @@ remoteGlobalIDString = 61AE364A20C00B370089D9D3; remoteInfo = linphoneExtension; }; + 5E31290A20D7A37E00CF3AAE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5E3128FF20D7A37E00CF3AAE; + remoteInfo = latestChatroomsWidget; + }; + 5EEE8FA420C80C23006E4176 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5EEE8F9920C80C23006E4176; + remoteInfo = latestCallsWidget; + }; 630589FC1B4E816A00EFAE36 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 630589F21B4E816900EFAE36 /* KIF.xcodeproj */; @@ -888,13 +914,15 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 61AE366220C00B370089D9D3 /* Embed App Extensions */ = { + 5EF0C35020C806A5005081B0 /* Embed App Extensions */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 13; files = ( 61AE365620C00B370089D9D3 /* linphoneExtension.appex in Embed App Extensions */, + 5E31290C20D7A37E00CF3AAE /* latestChatroomsWidget.appex in Embed App Extensions */, + 5EEE8FA620C80C23006E4176 /* latestCallsWidget.appex in Embed App Extensions */, ); name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -1043,6 +1071,19 @@ 61AE365320C00B370089D9D3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 61AE366320C00C810089D9D3 /* linphoneExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = linphoneExtension.entitlements; sourceTree = ""; }; 61F1996E20C6B1D5006B069A /* AVKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVKit.framework; path = System/Library/Frameworks/AVKit.framework; sourceTree = SDKROOT; }; + 5E30780420D8F00D00256DAE /* latestChatroomsWidget.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = latestChatroomsWidget.entitlements; sourceTree = ""; }; + 5E31290020D7A37E00CF3AAE /* latestChatroomsWidget.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = latestChatroomsWidget.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 5E31290320D7A37E00CF3AAE /* TodayViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TodayViewController.h; sourceTree = ""; }; + 5E31290420D7A37E00CF3AAE /* TodayViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TodayViewController.m; sourceTree = ""; }; + 5E31290720D7A37E00CF3AAE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; + 5E31290920D7A37E00CF3AAE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5EEE8F9A20C80C23006E4176 /* latestCallsWidget.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = latestCallsWidget.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 5EEE8F9D20C80C23006E4176 /* TodayViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TodayViewController.h; sourceTree = ""; }; + 5EEE8F9E20C80C23006E4176 /* TodayViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TodayViewController.m; sourceTree = ""; }; + 5EEE8FA120C80C23006E4176 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; + 5EEE8FA320C80C23006E4176 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5EEE8FB320C81334006E4176 /* latestCallsWidget.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = latestCallsWidget.entitlements; sourceTree = ""; }; + 5EF0C33820C806A5005081B0 /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; }; 630589DE1B4E810900EFAE36 /* ChatTester.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatTester.h; sourceTree = ""; }; 630589DF1B4E810900EFAE36 /* ChatTester.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatTester.m; sourceTree = ""; }; 630589E01B4E810900EFAE36 /* ContactsTester.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactsTester.h; sourceTree = ""; }; @@ -2016,6 +2057,22 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 5E3128FD20D7A37E00CF3AAE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5E31290120D7A37E00CF3AAE /* NotificationCenter.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5EEE8F9720C80C23006E4176 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5EEE8F9B20C80C23006E4176 /* NotificationCenter.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F08F118119C09C6A007D70C2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -2214,6 +2271,8 @@ F08F118419C09C6A007D70C2 /* liblinphoneTesterTests.xctest */, F0F952001A6AEB1000254160 /* linphoneTests.xctest */, 61AE364B20C00B370089D9D3 /* linphoneExtension.appex */, + 5EEE8F9A20C80C23006E4176 /* latestCallsWidget.appex */, + 5E31290020D7A37E00CF3AAE /* latestChatroomsWidget.appex */, ); name = Products; sourceTree = ""; @@ -2329,6 +2388,8 @@ 8C23BCB71D82AAC3005F19BB /* linphone.entitlements */, 080E96DDFE201D6D7F000001 /* Classes */, 61AE364C20C00B370089D9D3 /* linphoneExtension */, + 5EEE8F9C20C80C23006E4176 /* latestCallsWidget */, + 5E31290220D7A37E00CF3AAE /* latestChatroomsWidget */, 29B97323FDCFA39411CA2CEA /* Frameworks */, F0938158188E629800A55DFA /* iTunesArtwork */, 63058A0C1B4E821E00EFAE36 /* LiblinphoneTester */, @@ -2419,6 +2480,7 @@ F0181B6B18BF7B1200A9A357 /* SenTestingKit.framework */, 2264B6D111200342002C2C53 /* SystemConfiguration.framework */, 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, + 5EF0C33820C806A5005081B0 /* NotificationCenter.framework */, ); name = Frameworks; sourceTree = ""; @@ -2435,6 +2497,30 @@ path = linphoneExtension; sourceTree = ""; }; + 5E31290220D7A37E00CF3AAE /* latestChatroomsWidget */ = { + isa = PBXGroup; + children = ( + 5E30780420D8F00D00256DAE /* latestChatroomsWidget.entitlements */, + 5E31290320D7A37E00CF3AAE /* TodayViewController.h */, + 5E31290420D7A37E00CF3AAE /* TodayViewController.m */, + 5E31290620D7A37E00CF3AAE /* MainInterface.storyboard */, + 5E31290920D7A37E00CF3AAE /* Info.plist */, + ); + path = latestChatroomsWidget; + sourceTree = ""; + }; + 5EEE8F9C20C80C23006E4176 /* latestCallsWidget */ = { + isa = PBXGroup; + children = ( + 5EEE8FB320C81334006E4176 /* latestCallsWidget.entitlements */, + 5EEE8F9D20C80C23006E4176 /* TodayViewController.h */, + 5EEE8F9E20C80C23006E4176 /* TodayViewController.m */, + 5EEE8FA020C80C23006E4176 /* MainInterface.storyboard */, + 5EEE8FA320C80C23006E4176 /* Info.plist */, + ); + path = latestCallsWidget; + sourceTree = ""; + }; 630589DD1B4E810900EFAE36 /* TestsLinphone */ = { isa = PBXGroup; children = ( @@ -2762,8 +2848,8 @@ 633FECA61D3CD5570014B822 /* edit_list_disabled.png */, 633FECA71D3CD5570014B822 /* edit_list_disabled@2x.png */, 633FECA81D3CD5570014B822 /* footer_chat_default.png */, - 633FECA91D3CD5570014B822 /* footer_chat_default@2x.png */, 633FECAA1D3CD5570014B822 /* footer_chat_disabled.png */, + 633FECA91D3CD5570014B822 /* footer_chat_default@2x.png */, 633FECAB1D3CD5570014B822 /* footer_chat_disabled@2x.png */, 633FECAC1D3CD5570014B822 /* footer_contacts_default.png */, 633FECAD1D3CD5570014B822 /* footer_contacts_default@2x.png */, @@ -3220,12 +3306,14 @@ 1D60588F0D05DD3D006BFB54 /* Frameworks */, 8CDC89061EAF89A8006B5652 /* Embed Frameworks */, 8CB438A61EE6A65D0006F944 /* ShellScript */, - 61AE366220C00B370089D9D3 /* Embed App Extensions */, + 5EF0C35020C806A5005081B0 /* Embed App Extensions */, ); buildRules = ( ); dependencies = ( 61AE365520C00B370089D9D3 /* PBXTargetDependency */, + 5EEE8FA520C80C23006E4176 /* PBXTargetDependency */, + 5E31290B20D7A37E00CF3AAE /* PBXTargetDependency */, ); name = linphone; productName = linphone; @@ -3239,14 +3327,48 @@ 61AE364720C00B370089D9D3 /* Sources */, 61AE364820C00B370089D9D3 /* Frameworks */, 61AE364920C00B370089D9D3 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = linphoneExtension; + productName = linphoneExtension; + productReference = 61AE364B20C00B370089D9D3 /* linphoneExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 5E3128FF20D7A37E00CF3AAE /* latestChatroomsWidget */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5E31290D20D7A37E00CF3AAE /* Build configuration list for PBXNativeTarget "latestChatroomsWidget" */; + buildPhases = ( + 5E3128FC20D7A37E00CF3AAE /* Sources */, + 5E3128FD20D7A37E00CF3AAE /* Frameworks */, + 5E3128FE20D7A37E00CF3AAE /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = linphoneExtension; - productName = linphoneExtension; - productReference = 61AE364B20C00B370089D9D3 /* linphoneExtension.appex */; + name = latestChatroomsWidget; + productName = latestChatroomsWidget; + productReference = 5E31290020D7A37E00CF3AAE /* latestChatroomsWidget.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 5EEE8F9920C80C23006E4176 /* latestCallsWidget */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5EEE8FA720C80C24006E4176 /* Build configuration list for PBXNativeTarget "latestCallsWidget" */; + buildPhases = ( + 5EEE8F9620C80C23006E4176 /* Sources */, + 5EEE8F9720C80C23006E4176 /* Frameworks */, + 5EEE8F9820C80C23006E4176 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = latestCallsWidget; + productName = latestCallsWidget; + productReference = 5EEE8F9A20C80C23006E4176 /* latestCallsWidget.appex */; productType = "com.apple.product-type.app-extension"; }; F08F118319C09C6A007D70C2 /* liblinphoneTesterTests */ = { @@ -3340,6 +3462,26 @@ }; }; }; + 5E3128FF20D7A37E00CF3AAE = { + CreatedOnToolsVersion = 9.4; + DevelopmentTeam = Z2V957B3D6; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.ApplicationGroups.iOS = { + enabled = 1; + }; + }; + }; + 5EEE8F9920C80C23006E4176 = { + CreatedOnToolsVersion = 9.4; + DevelopmentTeam = Z2V957B3D6; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.ApplicationGroups.iOS = { + enabled = 1; + }; + }; + }; F08F118319C09C6A007D70C2 = { DevelopmentTeam = Z2V957B3D6; TestTargetID = F0BB8BD41936208100974404; @@ -3392,6 +3534,8 @@ F0BB8BD41936208100974404 /* liblinphoneTester */, F08F118319C09C6A007D70C2 /* liblinphoneTesterTests */, 61AE364A20C00B370089D9D3 /* linphoneExtension */, + 5EEE8F9920C80C23006E4176 /* latestCallsWidget */, + 5E3128FF20D7A37E00CF3AAE /* latestChatroomsWidget */, ); }; /* End PBXProject section */ @@ -3985,6 +4129,26 @@ buildActionMask = 2147483647; files = ( 61AE365220C00B370089D9D3 /* MainInterface.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5E3128FE20D7A37E00CF3AAE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5E31291A20D7AAAD00CF3AAE /* chat_group_avatar.png in Resources */, + 5E31291320D7AAA100CF3AAE /* avatar.png in Resources */, + 5E31290820D7A37E00CF3AAE /* MainInterface.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5EEE8F9820C80C23006E4176 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5E10ED4920D006C9002BF6FE /* chat_group_avatar.png in Resources */, + 5E10ED4820D00630002BF6FE /* avatar.png in Resources */, + 5EEE8FA220C80C23006E4176 /* MainInterface.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4215,6 +4379,22 @@ buildActionMask = 2147483647; files = ( 61AE364F20C00B370089D9D3 /* ShareViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5E3128FC20D7A37E00CF3AAE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5E31290520D7A37E00CF3AAE /* TodayViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5EEE8F9620C80C23006E4176 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5EEE8F9F20C80C23006E4176 /* TodayViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4261,6 +4441,16 @@ target = 61AE364A20C00B370089D9D3 /* linphoneExtension */; targetProxy = 61AE365420C00B370089D9D3 /* PBXContainerItemProxy */; }; + 5E31290B20D7A37E00CF3AAE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5E3128FF20D7A37E00CF3AAE /* latestChatroomsWidget */; + targetProxy = 5E31290A20D7A37E00CF3AAE /* PBXContainerItemProxy */; + }; + 5EEE8FA520C80C23006E4176 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5EEE8F9920C80C23006E4176 /* latestCallsWidget */; + targetProxy = 5EEE8FA420C80C23006E4176 /* PBXContainerItemProxy */; + }; 63058A4E1B4E832500EFAE36 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = KIF; @@ -4297,6 +4487,22 @@ name = MainInterface.storyboard; sourceTree = ""; }; + 5E31290620D7A37E00CF3AAE /* MainInterface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 5E31290720D7A37E00CF3AAE /* Base */, + ); + name = MainInterface.storyboard; + sourceTree = ""; + }; + 5EEE8FA020C80C23006E4176 /* MainInterface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 5EEE8FA120C80C23006E4176 /* Base */, + ); + name = MainInterface.storyboard; + sourceTree = ""; + }; 63058A0F1B4E821E00EFAE36 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( @@ -5157,6 +5363,165 @@ name = Distribution; }; 61AE365720C00B370089D9D3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = linphoneExtension/linphoneExtension.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = Z2V957B3D6; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = linphoneExtension/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.linphoneExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + 61AE365820C00B370089D9D3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = linphoneExtension/linphoneExtension.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = Z2V957B3D6; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = linphoneExtension/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.linphoneExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 1; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 61AE365920C00B370089D9D3 /* Distribution */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = linphoneExtension/linphoneExtension.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = Z2V957B3D6; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = linphoneExtension/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.linphoneExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 1; + VALIDATE_PRODUCT = YES; + }; + name = Distribution; + }; + 61AE365A20C00B370089D9D3 /* DistributionAdhoc */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = linphoneExtension/linphoneExtension.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = Z2V957B3D6; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = linphoneExtension/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.2; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.linphoneExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 1; + VALIDATE_PRODUCT = YES; + }; + name = DistributionAdhoc; + }; + 5E31290E20D7A37E00CF3AAE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -5166,17 +5531,24 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_ENTITLEMENTS = linphoneExtension/linphoneExtension.entitlements; + CODE_SIGN_ENTITLEMENTS = latestChatroomsWidget/latestChatroomsWidget.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = Z2V957B3D6; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/liblinphone-sdk/apple-darwin/Frameworks", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; @@ -5187,19 +5559,20 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; - INFOPLIST_FILE = linphoneExtension/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.2; + INFOPLIST_FILE = latestChatroomsWidget/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.linphoneExtension; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.widget.latestChatrooms; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 61AE365820C00B370089D9D3 /* Release */ = { + 5E31290F20D7A37E00CF3AAE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -5209,11 +5582,14 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_ENTITLEMENTS = linphoneExtension/linphoneExtension.entitlements; + CODE_SIGN_ENTITLEMENTS = latestChatroomsWidget/latestChatroomsWidget.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; @@ -5221,23 +5597,29 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = Z2V957B3D6; ENABLE_NS_ASSERTIONS = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/liblinphone-sdk/apple-darwin/Frameworks", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; - INFOPLIST_FILE = linphoneExtension/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.2; + INFOPLIST_FILE = latestChatroomsWidget/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.linphoneExtension; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.widget.latestChatrooms; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Release; }; - 61AE365920C00B370089D9D3 /* Distribution */ = { + 5E31291020D7A37E00CF3AAE /* Distribution */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -5247,11 +5629,14 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_ENTITLEMENTS = linphoneExtension/linphoneExtension.entitlements; + CODE_SIGN_ENTITLEMENTS = latestChatroomsWidget/latestChatroomsWidget.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; @@ -5259,24 +5644,29 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = Z2V957B3D6; ENABLE_NS_ASSERTIONS = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/liblinphone-sdk/apple-darwin/Frameworks", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; - INFOPLIST_FILE = linphoneExtension/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.2; + INFOPLIST_FILE = latestChatroomsWidget/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.linphoneExtension; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.widget.latestChatrooms; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = Distribution; }; - 61AE365A20C00B370089D9D3 /* DistributionAdhoc */ = { + 5E31291120D7A37E00CF3AAE /* DistributionAdhoc */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -5286,11 +5676,14 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_ENTITLEMENTS = linphoneExtension/linphoneExtension.entitlements; + CODE_SIGN_ENTITLEMENTS = latestChatroomsWidget/latestChatroomsWidget.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; @@ -5298,19 +5691,216 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = Z2V957B3D6; ENABLE_NS_ASSERTIONS = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/liblinphone-sdk/apple-darwin/Frameworks", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; - INFOPLIST_FILE = linphoneExtension/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.2; + INFOPLIST_FILE = latestChatroomsWidget/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.linphoneExtension; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.widget.latestChatrooms; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = DistributionAdhoc; + }; + 5EEE8FA820C80C24006E4176 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = latestCallsWidget/latestCallsWidget.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = Z2V957B3D6; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/liblinphone-sdk/apple-darwin/Frameworks", + ); + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = latestCallsWidget/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.widget.latestCalls; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 5EEE8FA920C80C24006E4176 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = latestCallsWidget/latestCallsWidget.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = Z2V957B3D6; + ENABLE_NS_ASSERTIONS = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/liblinphone-sdk/apple-darwin/Frameworks", + ); + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = latestCallsWidget/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.widget.latestCalls; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 5EEE8FAA20C80C24006E4176 /* Distribution */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = latestCallsWidget/latestCallsWidget.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = Z2V957B3D6; + ENABLE_NS_ASSERTIONS = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/liblinphone-sdk/apple-darwin/Frameworks", + ); + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = latestCallsWidget/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.widget.latestCalls; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Distribution; + }; + 5EEE8FAB20C80C24006E4176 /* DistributionAdhoc */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = latestCallsWidget/latestCallsWidget.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = Z2V957B3D6; + ENABLE_NS_ASSERTIONS = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/liblinphone-sdk/apple-darwin/Frameworks", + ); + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = latestCallsWidget/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.widget.latestCalls; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; name = DistributionAdhoc; @@ -5968,6 +6558,28 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + 5E31290D20D7A37E00CF3AAE /* Build configuration list for PBXNativeTarget "latestChatroomsWidget" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5E31290E20D7A37E00CF3AAE /* Debug */, + 5E31290F20D7A37E00CF3AAE /* Release */, + 5E31291020D7A37E00CF3AAE /* Distribution */, + 5E31291120D7A37E00CF3AAE /* DistributionAdhoc */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 5EEE8FA720C80C24006E4176 /* Build configuration list for PBXNativeTarget "latestCallsWidget" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5EEE8FA820C80C24006E4176 /* Debug */, + 5EEE8FA920C80C24006E4176 /* Release */, + 5EEE8FAA20C80C24006E4176 /* Distribution */, + 5EEE8FAB20C80C24006E4176 /* DistributionAdhoc */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; C01FCF4E08A954540054247B /* Build configuration list for PBXProject "linphone" */ = { isa = XCConfigurationList; buildConfigurations = (