Mztj67_#M}W?l>kYSliK<%xAp;0j{!}J0!o7b
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
literal 0
HcmV?d00001
diff --git a/experimental/date_planner/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/experimental/date_planner/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8
GIT binary patch
literal 1418
zcmV;51$Fv~P)q
zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+
zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq
z^={4hPQv)y=I|4n+?>7Fim=dxt1
z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT
zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf`
zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_>
z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3
zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF
z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a
z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE
z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62(
zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;?
zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-<
z{s<&cCV_1`^TD^ia9!*mQDq&
zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw
zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv
zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF
z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC
YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H
literal 0
HcmV?d00001
diff --git a/experimental/date_planner/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/experimental/date_planner/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 00000000000..0bedcf2fd46
--- /dev/null
+++ b/experimental/date_planner/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/experimental/date_planner/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/experimental/date_planner/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838
GIT binary patch
literal 68
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J
Q1PU{Fy85}Sb4q9e0B4a5jsO4v
literal 0
HcmV?d00001
diff --git a/experimental/date_planner/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/experimental/date_planner/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838
GIT binary patch
literal 68
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J
Q1PU{Fy85}Sb4q9e0B4a5jsO4v
literal 0
HcmV?d00001
diff --git a/experimental/date_planner/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/experimental/date_planner/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838
GIT binary patch
literal 68
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J
Q1PU{Fy85}Sb4q9e0B4a5jsO4v
literal 0
HcmV?d00001
diff --git a/experimental/date_planner/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/experimental/date_planner/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 00000000000..89c2725b70f
--- /dev/null
+++ b/experimental/date_planner/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
@@ -0,0 +1,5 @@
+# Launch Screen Assets
+
+You can customize the launch screen with your own desired assets by replacing the image files in this directory.
+
+You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
diff --git a/experimental/date_planner/ios/Runner/Base.lproj/LaunchScreen.storyboard b/experimental/date_planner/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 00000000000..f2e259c7c93
--- /dev/null
+++ b/experimental/date_planner/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/experimental/date_planner/ios/Runner/Base.lproj/Main.storyboard b/experimental/date_planner/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 00000000000..f3c28516fb3
--- /dev/null
+++ b/experimental/date_planner/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/experimental/date_planner/ios/Runner/Info.plist b/experimental/date_planner/ios/Runner/Info.plist
new file mode 100644
index 00000000000..c836cd5ddf5
--- /dev/null
+++ b/experimental/date_planner/ios/Runner/Info.plist
@@ -0,0 +1,49 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ Date Planner
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ date_planner
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSRequiresIPhoneOS
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ CADisableMinimumFrameDurationOnPhone
+
+ UIApplicationSupportsIndirectInputEvents
+
+
+
diff --git a/experimental/date_planner/ios/Runner/Runner-Bridging-Header.h b/experimental/date_planner/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 00000000000..308a2a560b4
--- /dev/null
+++ b/experimental/date_planner/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"
diff --git a/experimental/date_planner/ios/RunnerTests/RunnerTests.swift b/experimental/date_planner/ios/RunnerTests/RunnerTests.swift
new file mode 100644
index 00000000000..86a7c3b1b61
--- /dev/null
+++ b/experimental/date_planner/ios/RunnerTests/RunnerTests.swift
@@ -0,0 +1,12 @@
+import Flutter
+import UIKit
+import XCTest
+
+class RunnerTests: XCTestCase {
+
+ func testExample() {
+ // If you add code to the Runner application, consider adding tests here.
+ // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
+ }
+
+}
diff --git a/experimental/date_planner/lib/color_options.dart b/experimental/date_planner/lib/color_options.dart
new file mode 100644
index 00000000000..9d13e58167d
--- /dev/null
+++ b/experimental/date_planner/lib/color_options.dart
@@ -0,0 +1,28 @@
+// Copyright 2024 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:math';
+
+import 'package:flutter/cupertino.dart';
+
+enum ColorOptions {
+ primary(CupertinoColors.black),
+ gray(CupertinoColors.lightBackgroundGray),
+ red(CupertinoColors.systemRed),
+ orange(CupertinoColors.systemOrange),
+ yellow(CupertinoColors.systemYellow),
+ green(CupertinoColors.systemGreen),
+ mint(CupertinoColors.systemMint),
+ cyan(CupertinoColors.systemCyan),
+ indigo(CupertinoColors.systemIndigo),
+ purple(CupertinoColors.systemPurple);
+
+ final Color color;
+ static final _rnd = Random();
+
+ const ColorOptions(this.color);
+
+ factory ColorOptions.random() =>
+ ColorOptions.values[_rnd.nextInt(ColorOptions.values.length)];
+}
diff --git a/experimental/date_planner/lib/event.dart b/experimental/date_planner/lib/event.dart
new file mode 100644
index 00000000000..1e3b05d0f9a
--- /dev/null
+++ b/experimental/date_planner/lib/event.dart
@@ -0,0 +1,80 @@
+// Copyright 2024 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/cupertino.dart';
+import 'package:intl/intl.dart';
+import 'package:uuid/uuid.dart';
+
+import 'color_options.dart';
+import 'event_task.dart';
+
+class Event implements Comparable {
+ static const _uuid = Uuid();
+
+ final id = _uuid.v4();
+ String title;
+ ColorOptions color;
+ IconData icon;
+ List tasks;
+ DateTime date;
+
+ Event({
+ required this.title,
+ ColorOptions? color,
+ this.icon = CupertinoIcons.add,
+ List? tasks,
+ DateTime? date,
+ }) : color = color ?? ColorOptions.random(),
+ tasks = tasks ?? [EventTask(text: '')],
+ date = date ?? DateTime.now();
+
+ Event copy() {
+ return Event(
+ title: title,
+ color: color,
+ icon: icon,
+ tasks: tasks,
+ date: date,
+ );
+ }
+
+ updateWith(Event e) {
+ title = e.title;
+ color = e.color;
+ icon = e.icon;
+ tasks = e.tasks;
+ date = e.date;
+ }
+
+ int get remainingTaskCount => tasks.where((e) => !e.isCompleted).length;
+
+ bool get isComplete => remainingTaskCount == 0;
+
+ bool get isPast => DateTime.now().isAfter(date);
+
+ bool get isWithinSevenDays => !isPast && date.isBefore(FromNow.sevenDays);
+
+ bool get isWithinSevenToThirtyDays =>
+ !isPast && !isWithinSevenDays && date.isBefore(FromNow.thirtyDays);
+
+ bool get isDistant => date.isAfter(FromNow.thirtyDays);
+
+ String get dateFormated => '${DateFormat.yMMMd().format(date)} at '
+ '${DateFormat.Hm().format(date)}';
+
+ @override
+ int compareTo(Event other) => date.compareTo(other.date);
+}
+
+class FromNow {
+ static DateTime get sevenDays => DateTime.now().add(const Duration(days: 7));
+
+ static DateTime get thirtyDays =>
+ DateTime.now().add(const Duration(days: 30));
+
+ static DateTime roundedHours(int hours) {
+ final date = DateTime.now().add(Duration(hours: hours));
+ return DateTime(date.year, date.month, date.day, date.hour);
+ }
+}
diff --git a/experimental/date_planner/lib/event_data.dart b/experimental/date_planner/lib/event_data.dart
new file mode 100644
index 00000000000..a3e16fa2cc7
--- /dev/null
+++ b/experimental/date_planner/lib/event_data.dart
@@ -0,0 +1,162 @@
+// Copyright 2024 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/cupertino.dart';
+
+import 'color_options.dart';
+import 'event.dart';
+import 'event_task.dart';
+
+class EventData with ChangeNotifier {
+ static final _events = buildSampleData();
+
+ void add(Event event) {
+ _events.add(event);
+ notifyListeners();
+ }
+
+ void delete(Event event) {
+ _events.remove(event);
+ notifyListeners();
+ }
+
+ void update(Event original, Event updated) {
+ _events.firstWhere((e) => e.id == original.id).updateWith(updated);
+ notifyListeners();
+ }
+
+ void exists(Event event) => _events.contains(event);
+
+ List sorted(Period period) => _events
+ .where(
+ (e) => switch (period) {
+ Period.nextSevenDays => e.isWithinSevenDays,
+ Period.nextThirtyDays => e.isWithinSevenToThirtyDays,
+ Period.past => e.isPast,
+ Period.future => e.isDistant,
+ },
+ )
+ .toList()
+ ..sort((e1, e2) => e1.date.compareTo(e2.date));
+}
+
+enum Period {
+ nextSevenDays(name: 'Next 7 Days'),
+ nextThirtyDays(name: 'Next 30 Days'),
+ future(name: 'Future'),
+ past(name: 'Past');
+
+ const Period({required this.name});
+
+ final String name;
+}
+
+List buildSampleData() {
+ return [
+ Event(
+ title: 'Maya\'s Birthday',
+ color: ColorOptions.red,
+ icon: CupertinoIcons.gift,
+ tasks: EventTask.buildList([
+ 'Guava kombucha',
+ 'Paper cups and plates',
+ 'Cheese plate',
+ 'Party poppers',
+ ]),
+ date: FromNow.roundedHours(24 * 30),
+ ),
+ Event(
+ title: 'Pagliacci',
+ color: ColorOptions.yellow,
+ // TODO(mit-mit): Use the icon "theatermasks.fill".
+ icon: CupertinoIcons.thermometer_snowflake,
+ tasks: EventTask.buildList([
+ 'Buy new tux',
+ 'Get tickets',
+ 'Pick up Carmen at the airport and bring her to the show',
+ ]),
+ date: FromNow.roundedHours(22),
+ ),
+ Event(
+ title: 'Doctor\'s Appointment',
+ // TODO(mit-mit): Use the icon "facemask.fill".
+ icon: CupertinoIcons.lab_flask_solid,
+ color: ColorOptions.indigo,
+ tasks:
+ EventTask.buildList(['Bring medical ID', 'Record heart rate data']),
+ date: FromNow.roundedHours(24 * 4),
+ ),
+ Event(
+ title: 'Camping Trip',
+ // TODO(mit-mit): Use the icon "leaf.fill".
+ icon: CupertinoIcons.leaf_arrow_circlepath,
+ color: ColorOptions.green,
+ tasks: EventTask.buildList([
+ 'Find a sleeping bag',
+ 'Bug spray',
+ 'Paper towels',
+ 'Food for 4 meals',
+ 'Straw hat',
+ ]),
+ date: FromNow.roundedHours(36),
+ ),
+ Event(
+ title: 'Game Night',
+ icon: CupertinoIcons.gamecontroller_fill,
+ color: ColorOptions.cyan,
+ tasks: EventTask.buildList([
+ 'Find a board game to bring',
+ 'Bring a desert to share',
+ ]),
+ date: FromNow.roundedHours(24 * 2),
+ ),
+ Event(
+ title: 'First Day of School',
+ // TODO(mit-mit): Use the icon "graduationcap.fill".
+ icon: CupertinoIcons.hammer,
+ color: ColorOptions.primary,
+ tasks: EventTask.buildList([
+ 'Notebooks',
+ 'Pencils',
+ 'Binder',
+ 'First day of school outfit',
+ ]),
+ date: FromNow.roundedHours(24 * 365),
+ ),
+ Event(
+ title: 'Book Launch',
+ icon: CupertinoIcons.book_fill,
+ color: ColorOptions.purple,
+ tasks: EventTask.buildList([
+ 'Finish first draft',
+ 'Send draft to editor',
+ 'Final read-through',
+ ]),
+ date: FromNow.roundedHours(24 * 365 * 2),
+ ),
+ Event(
+ title: 'WWDC',
+ // TODO(mit-mit): Use the icon "globe.americas.fill"
+ icon: CupertinoIcons.globe,
+ color: ColorOptions.gray,
+ tasks: EventTask.buildList([
+ 'Watch Keynote',
+ 'Watch What\'s new in SwiftUI',
+ 'Go to DT developer labs',
+ 'Learn about Create ML',
+ ]),
+ date: DateTime(7, 6, 2021)),
+ Event(
+ title: 'Sayulita Trip',
+ icon: CupertinoIcons.briefcase_fill,
+ color: ColorOptions.orange,
+ tasks: EventTask.buildList([
+ 'Buy plane tickets',
+ 'Get a new bathing suit',
+ 'Find a hotel room',
+ ]),
+ date: FromNow.roundedHours(24 * 19),
+ ),
+ ];
+}
diff --git a/experimental/date_planner/lib/event_detail.dart b/experimental/date_planner/lib/event_detail.dart
new file mode 100644
index 00000000000..af27df96ff5
--- /dev/null
+++ b/experimental/date_planner/lib/event_detail.dart
@@ -0,0 +1,157 @@
+// Copyright 2024 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/cupertino.dart';
+
+import 'color_options.dart';
+import 'event.dart';
+import 'event_task.dart';
+import 'symbol_editor.dart';
+import 'task_row.dart';
+
+class EventDetail extends StatefulWidget {
+ final Event event;
+ final bool isEditing;
+
+ const EventDetail({
+ super.key,
+ required this.event,
+ required this.isEditing,
+ });
+
+ @override
+ State createState() => _EventDetailState();
+}
+
+class _EventDetailState extends State {
+ final _eventText = TextEditingController();
+
+ @override
+ void initState() {
+ _eventText.text = widget.event.title;
+ super.initState();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ const titleStyle = TextStyle(fontWeight: FontWeight.bold, fontSize: 22);
+ final event = widget.event;
+
+ // TODO(mit-mit): Investigate manual overriding of colors and padding.
+ return Padding(
+ padding: const EdgeInsets.all(16),
+ child: Column(
+ children: [
+ Container(
+ padding: const EdgeInsets.fromLTRB(16, 8, 0, 0),
+ color: CupertinoColors.systemBackground,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Row(
+ children: [
+ if (widget.isEditing)
+ CupertinoButton(
+ padding: EdgeInsets.zero,
+ minSize: 0,
+ onPressed: () {
+ Navigator.of(context)
+ .push(
+ CupertinoPageRoute<(IconData, ColorOptions)?>(
+ builder: (_) => SymbolEditor(
+ event.icon,
+ event.color,
+ ),
+ ),
+ )
+ .then(
+ ((IconData, ColorOptions)? data) {
+ if (data != null) {
+ setState(() {
+ var (icon, color) = data;
+ event.icon = icon;
+ event.color = color;
+ });
+ }
+ },
+ );
+ },
+ child: Icon(
+ event.icon,
+ size: 28,
+ color: event.color.color,
+ ),
+ ),
+ if (!widget.isEditing)
+ Icon(
+ event.icon,
+ size: 28,
+ color: event.color.color,
+ ),
+ const SizedBox(width: 12),
+ if (widget.isEditing)
+ Expanded(
+ child: CupertinoTextField(
+ decoration: null,
+ padding: EdgeInsets.zero,
+ style: titleStyle,
+ controller: _eventText,
+ onChanged: (value) => event.title = value,
+ ),
+ ),
+ if (!widget.isEditing) Text(event.title, style: titleStyle),
+ ],
+ ),
+ const SizedBox(height: 12),
+ // TODO(mit-mit): Use a widget for picking a date.
+ // Issue: Blocked on not having the right calendar widget:
+ // https://github.com/flutter/flutter/issues/63693
+ Text(event.dateFormated),
+ CupertinoListSection(
+ // TODO(mit-mit): The list of tasks should be left-flush with the date above.
+ margin: EdgeInsets.zero,
+ backgroundColor: CupertinoColors.systemBackground,
+ decoration: null,
+ header: const Text(
+ 'Tasks',
+ style: TextStyle(
+ color: CupertinoColors.black,
+ fontWeight: FontWeight.bold,
+ fontSize: 16,
+ ),
+ ),
+ children: [
+ for (EventTask t in event.tasks)
+ TaskRow(
+ task: t,
+ isEditing: widget.isEditing,
+ ),
+ if (widget.isEditing)
+ // TODO(mit-mit): CupertinoButton with icon support?
+ // Consider if CupertinoButton could support setting
+ // both a label and an icon directly:
+ // https://www.kodeco.com/books/swiftui-cookbook/v1.0/chapters/8-add-an-icon-to-a-button-in-swiftui
+ CupertinoButton(
+ child: const Row(
+ children: [
+ Icon(CupertinoIcons.plus),
+ Text('Add task'),
+ ],
+ ),
+ onPressed: () {
+ setState(() {
+ event.tasks.add(EventTask(text: ''));
+ });
+ },
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/experimental/date_planner/lib/event_editor.dart b/experimental/date_planner/lib/event_editor.dart
new file mode 100644
index 00000000000..7b43da35964
--- /dev/null
+++ b/experimental/date_planner/lib/event_editor.dart
@@ -0,0 +1,117 @@
+// Copyright 2024 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/cupertino.dart';
+
+import 'event.dart';
+import 'event_detail.dart';
+
+class EventEditor extends StatefulWidget {
+ final Event event;
+ final bool isNew;
+ const EventEditor({
+ super.key,
+ required this.event,
+ required this.isNew,
+ });
+
+ @override
+ State createState() => _EventEditorState();
+}
+
+class _EventEditorState extends State {
+ late Event event;
+ late bool isNew;
+ late bool isEditing;
+
+ @override
+ void initState() {
+ isNew = widget.isNew;
+ isEditing = isNew;
+ event = widget.event;
+ super.initState();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return CupertinoPageScaffold(
+ backgroundColor: CupertinoColors.secondarySystemBackground,
+ navigationBar: CupertinoNavigationBar(
+ // TODO(mit-mit): Resolve manual padding issues.
+ //
+ // Note that even with the padding overriding below, the chevron/
+ // back arrow doesn't seem to be far enough to the left.
+ //
+ // Is this maybe the issue here?
+ // https://github.com/flutter/flutter/issues/91715
+ leading: isNew
+ ? CupertinoButton(
+ padding: EdgeInsets.zero,
+ child: const Text('Cancel'),
+ onPressed: () => Navigator.pop(context, null),
+ )
+ : CupertinoButton(
+ padding: EdgeInsets.zero,
+ onPressed: () {
+ Navigator.pop(context, event);
+ },
+ child: const Row(
+ children: [
+ Icon(CupertinoIcons.back),
+ Text('Date Planner'),
+ ],
+ ),
+ ),
+ trailing: CupertinoButton(
+ padding: EdgeInsets.zero,
+ child: Text(isNew ? 'Add' : (isEditing ? 'Done' : 'Edit')),
+ onPressed: () {
+ if (isNew) {
+ Navigator.pop(context, event);
+ } else {
+ setState(() {
+ if (isEditing) {
+ isEditing = false;
+ } else {
+ isEditing = true;
+ }
+ });
+ }
+ },
+ ),
+ ),
+ // TODO(mit-mit): Why isn't SafeArea included by default?
+ child: SafeArea(
+ bottom: false,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ EventDetail(
+ event: event,
+ isEditing: isEditing,
+ ),
+ const Spacer(),
+ if (isEditing && !isNew)
+ ColoredBox(
+ color: CupertinoColors.white,
+ child: Column(
+ children: [
+ CupertinoButton(
+ child: const Text('Delete Event'),
+ onPressed: () {
+ setState(() {
+ Navigator.pop(context, null);
+ });
+ },
+ ),
+ const SizedBox(height: 24),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/experimental/date_planner/lib/event_list.dart b/experimental/date_planner/lib/event_list.dart
new file mode 100644
index 00000000000..5289138dd78
--- /dev/null
+++ b/experimental/date_planner/lib/event_list.dart
@@ -0,0 +1,99 @@
+// Copyright 2024 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/cupertino.dart';
+import 'package:provider/provider.dart';
+
+import 'event.dart';
+import 'event_data.dart';
+import 'event_editor.dart';
+import 'event_row.dart';
+
+class EventList extends StatelessWidget {
+ const EventList({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Consumer(
+ builder: (BuildContext context, EventData events, Widget? child) {
+ return CupertinoPageScaffold(
+ // TODO(mit-mit): Avoid having to pass nav bar manually.
+ //
+ // Would like to pass nav bar and body to CupertinoPageScaffold
+ // directly, similar to the Material Scaffold's `appBar` and `body`
+ // args.
+ // https://github.com/flutter/flutter/issues/149625
+ child: CustomScrollView(
+ slivers: [
+ CupertinoSliverNavigationBar(
+ largeTitle: const Text('Date Planner'),
+ trailing: CupertinoButton(
+ padding: EdgeInsets.zero,
+ child: const Icon(CupertinoIcons.plus),
+ onPressed: () async {
+ // Issue: Should go to a sheet, not a a full-screen page.
+ // Blocked on https://github.com/flutter/flutter/issues/42560.
+ Event? newEvent = await Navigator.of(context).push(
+ CupertinoPageRoute(
+ builder: (_) => EventEditor(
+ event: Event(title: 'New event'),
+ isNew: true,
+ ),
+ ),
+ );
+
+ if (newEvent != null) {
+ events.add(newEvent);
+ }
+ },
+ ),
+ ),
+ SliverList.list(
+ children: [
+ for (Period p in Period.values)
+ CupertinoListSection(
+ header: Text(
+ p.name.toUpperCase(),
+ style: const TextStyle(
+ fontWeight: FontWeight.bold,
+ fontSize: 16,
+ ),
+ ),
+ children: [
+ for (Event e in events.sorted(p))
+ // TODO: Support swipe action for deleting.
+ // Should probably use Dismissable?
+ // https://api.flutter.dev/flutter/widgets/Dismissible-class.html
+ EventRow(
+ event: e,
+ onTap: () async {
+ Event? updatedEvent =
+ await Navigator.of(context).push(
+ CupertinoPageRoute(
+ builder: (_) => EventEditor(
+ event: e.copy(),
+ isNew: false,
+ ),
+ ),
+ );
+ if (updatedEvent == null) {
+ // The editor passes back null when it deleted
+ // the element.
+ events.delete(e);
+ } else {
+ events.update(e, updatedEvent);
+ }
+ },
+ )
+ ],
+ ),
+ ],
+ ),
+ ],
+ ),
+ );
+ },
+ );
+ }
+}
diff --git a/experimental/date_planner/lib/event_row.dart b/experimental/date_planner/lib/event_row.dart
new file mode 100644
index 00000000000..4d7c45b88da
--- /dev/null
+++ b/experimental/date_planner/lib/event_row.dart
@@ -0,0 +1,52 @@
+// Copyright 2024 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:flutter/cupertino.dart';
+
+import 'event.dart';
+
+class EventRow extends StatelessWidget {
+ const EventRow({
+ super.key,
+ required this.event,
+ this.onTap,
+ });
+
+ final Event event;
+ final FutureOr Function()? onTap;
+
+ @override
+ Widget build(BuildContext context) {
+ // TODO(mit-mit): The corners of the tiles should be rounded.
+ return Padding(
+ padding: const EdgeInsets.symmetric(vertical: 4),
+ child: CupertinoListTile(
+ title: Text(
+ event.title,
+ style: const TextStyle(fontWeight: FontWeight.bold),
+ ),
+ subtitle: Text(event.dateFormated),
+ leading: Icon(
+ event.icon,
+ size: 28,
+ color: event.color.color,
+ ),
+ trailing: Row(
+ children: [
+ event.isComplete
+ ? const Icon(CupertinoIcons.check_mark)
+ : Text(
+ '${event.remainingTaskCount}',
+ style: const TextStyle(color: CupertinoColors.systemGrey),
+ ),
+ const CupertinoListTileChevron(),
+ ],
+ ),
+ onTap: onTap,
+ ),
+ );
+ }
+}
diff --git a/experimental/date_planner/lib/event_symbol.dart b/experimental/date_planner/lib/event_symbol.dart
new file mode 100644
index 00000000000..fa218724371
--- /dev/null
+++ b/experimental/date_planner/lib/event_symbol.dart
@@ -0,0 +1,58 @@
+// Copyright 2024 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/cupertino.dart';
+
+// TODO(mit-mit): Update when missing icons are added.
+// https://github.com/flutter/flutter/issues/82634
+final eventSymbols = [
+ CupertinoIcons.house_fill,
+ CupertinoIcons.ticket_fill,
+ CupertinoIcons.gamecontroller_fill,
+//CupertinoIcons.theatermasks_fill,
+//CupertinoIcons.ladybug_fill,
+//CupertinoIcons.books.vertical_fill,
+//CupertinoIcons.moon.zzz_fill,
+ CupertinoIcons.umbrella_fill,
+//CupertinoIcons.paintbrush.pointed_fill,
+//CupertinoIcons.leaf_fill,
+//CupertinoIcons.globe.americas_fill,
+ CupertinoIcons.clock_fill,
+//CupertinoIcons.building.2_fill,
+ CupertinoIcons.gift_fill,
+//CupertinoIcons.graduationcap_fill,
+//CupertinoIcons.heart.rectangle_fill,
+//CupertinoIcons.phone.bubble.left_fill,
+//CupertinoIcons.cloud.rain_fill,
+//CupertinoIcons.building.columns_fill,
+//CupertinoIcons.mic.circle_fill,
+//CupertinoIcons.comb_fill,
+//CupertinoIcons.person.3_fill,
+ CupertinoIcons.bell_fill,
+ CupertinoIcons.hammer_fill,
+ CupertinoIcons.star_fill,
+//CupertinoIcons.crown_fill,
+ CupertinoIcons.briefcase_fill,
+//CupertinoIcons.speaker.wave.3_fill,
+//CupertinoIcons.tshirt_fill,
+ CupertinoIcons.tag_fill,
+ CupertinoIcons.airplane,
+//CupertinoIcons.pawprint_fill,
+//CupertinoIcons.case_fill,
+ CupertinoIcons.creditcard_fill,
+//CupertinoIcons.infinity.circle_fill,
+//CupertinoIcons.dice_fill,
+ CupertinoIcons.heart_fill,
+ CupertinoIcons.camera_fill,
+//CupertinoIcons.bicycle,
+//CupertinoIcons.radio_fill,
+ CupertinoIcons.car_fill,
+ CupertinoIcons.flag_fill,
+ CupertinoIcons.map_fill,
+//CupertinoIcons.figure.wave,
+//CupertinoIcons.mappin.and.ellipse,
+//CupertinoIcons.facemask_fill,
+ CupertinoIcons.eyeglasses,
+ CupertinoIcons.tram_fill,
+];
diff --git a/experimental/date_planner/lib/event_task.dart b/experimental/date_planner/lib/event_task.dart
new file mode 100644
index 00000000000..d41e3f512ef
--- /dev/null
+++ b/experimental/date_planner/lib/event_task.dart
@@ -0,0 +1,13 @@
+// Copyright 2024 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+class EventTask {
+ String text;
+ bool isCompleted;
+
+ EventTask({required this.text, this.isCompleted = false});
+
+ static List buildList(List taskDescriptions) =>
+ [for (var task in taskDescriptions) EventTask(text: task)];
+}
diff --git a/experimental/date_planner/lib/main.dart b/experimental/date_planner/lib/main.dart
new file mode 100644
index 00000000000..255bb20d9a5
--- /dev/null
+++ b/experimental/date_planner/lib/main.dart
@@ -0,0 +1,35 @@
+// Copyright 2024 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/cupertino.dart';
+import 'package:provider/provider.dart';
+
+import 'event_data.dart';
+import 'event_list.dart';
+
+void main() {
+ runApp(
+ ChangeNotifierProvider(
+ create: (context) => EventData(),
+ child: const DatePlannerApp(),
+ ),
+ );
+}
+
+CupertinoThemeData cupertinoLight = const CupertinoThemeData(
+ brightness: Brightness.light,
+ primaryColor: CupertinoColors.activeBlue,
+);
+
+class DatePlannerApp extends StatelessWidget {
+ const DatePlannerApp({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return CupertinoApp(
+ home: const EventList(),
+ theme: cupertinoLight,
+ );
+ }
+}
diff --git a/experimental/date_planner/lib/symbol_editor.dart b/experimental/date_planner/lib/symbol_editor.dart
new file mode 100644
index 00000000000..fd19432be94
--- /dev/null
+++ b/experimental/date_planner/lib/symbol_editor.dart
@@ -0,0 +1,108 @@
+// Copyright 2024 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/cupertino.dart';
+
+import 'color_options.dart';
+import 'event_symbol.dart';
+
+class SymbolEditor extends StatefulWidget {
+ final IconData icon;
+ final ColorOptions color;
+
+ const SymbolEditor(this.icon, this.color, {super.key});
+
+ @override
+ State createState() => _SymbolEditorState();
+}
+
+class _SymbolEditorState extends State {
+ late IconData _currentIcon = widget.icon;
+ late ColorOptions _currentColor = widget.color;
+ _SymbolEditorState();
+
+ @override
+ Widget build(BuildContext context) {
+ // TODO(mit-mit): Should use a Sheet
+ // https://github.com/flutter/flutter/issues/42560
+ return CupertinoPageScaffold(
+ backgroundColor: CupertinoColors.white,
+ child: SafeArea(
+ child: Padding(
+ padding: const EdgeInsets.all(16),
+ child: Column(
+ children: [
+ Row(
+ children: [
+ const Spacer(),
+ CupertinoButton(
+ padding: EdgeInsets.zero,
+ child: const Text('Done'),
+ onPressed: () =>
+ Navigator.pop(context, (_currentIcon, _currentColor)),
+ ),
+ ],
+ ),
+ const SizedBox(height: 16),
+ Icon(
+ _currentIcon,
+ size: 48,
+ color: _currentColor.color,
+ ),
+ const SizedBox(height: 32),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+ children: [
+ for (ColorOptions color in ColorOptions.values)
+ // TODO(mit-mit): Circles should be bigger and have less padding between them.
+ CupertinoButton(
+ padding: EdgeInsets.zero,
+ minSize: 0,
+ child: Icon(
+ CupertinoIcons.circle_fill,
+ color: color.color,
+ ),
+ onPressed: () {
+ setState(() {
+ _currentColor = color;
+ });
+ },
+ ),
+ ],
+ ),
+ const SizedBox(height: 16),
+ // TODO(mit-mit): File issue for missing Cupertino Divider widget.
+ // Should have something similar to the Material devider.
+ // https://api.flutter.dev/flutter/material/Divider-class.html
+ const Text('. . . . . . . . . . . . . . . '),
+ const SizedBox(height: 16),
+ Expanded(
+ child: GridView.count(
+ primary: false,
+ crossAxisCount: 6,
+ mainAxisSpacing: 10,
+ children: [
+ for (var icon in eventSymbols)
+ CupertinoButton(
+ padding: EdgeInsets.zero,
+ child: Icon(
+ icon,
+ size: 32,
+ ),
+ onPressed: () {
+ setState(() {
+ _currentIcon = icon;
+ });
+ },
+ )
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/experimental/date_planner/lib/task_row.dart b/experimental/date_planner/lib/task_row.dart
new file mode 100644
index 00000000000..4c817ba07f6
--- /dev/null
+++ b/experimental/date_planner/lib/task_row.dart
@@ -0,0 +1,59 @@
+// Copyright 2024 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter/cupertino.dart';
+
+import 'event_task.dart';
+
+class TaskRow extends StatefulWidget {
+ final EventTask task;
+ final bool isEditing;
+ const TaskRow({super.key, required this.task, required this.isEditing});
+
+ @override
+ State createState() => _TaskRowState();
+}
+
+class _TaskRowState extends State {
+ final _taskText = TextEditingController();
+
+ @override
+ void initState() {
+ _taskText.text = widget.task.text;
+ super.initState();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Row(
+ children: [
+ CupertinoButton(
+ onPressed: widget.isEditing
+ ? () {
+ setState(() {
+ widget.task.isCompleted = !widget.task.isCompleted;
+ });
+ }
+ : null,
+ child: Icon(
+ widget.task.isCompleted
+ ? CupertinoIcons.checkmark_circle_fill
+ : CupertinoIcons.circle,
+ color: CupertinoColors.black,
+ ),
+ ),
+ Expanded(
+ child: widget.isEditing
+ ? CupertinoTextField(
+ decoration: null,
+ padding: EdgeInsets.zero,
+ controller: _taskText,
+ onChanged: (value) => widget.task.text = value,
+ )
+ : Text(widget.task.text),
+ ),
+ ],
+ );
+ }
+}
diff --git a/experimental/date_planner/pubspec.yaml b/experimental/date_planner/pubspec.yaml
new file mode 100644
index 00000000000..3aa87381061
--- /dev/null
+++ b/experimental/date_planner/pubspec.yaml
@@ -0,0 +1,18 @@
+name: date_planner
+description: "An iOS-style date planner."
+publish_to: 'none' # Remove this line if you wish to publish to pub.dev
+version: 0.1.0
+
+environment:
+ sdk: ^3.5.0
+
+dependencies:
+ flutter:
+ sdk: flutter
+ cupertino_icons: ^1.0.8
+ intl:
+ provider:
+ uuid:
+
+dev_dependencies:
+ flutter_lints: ^4.0.0
From 27fe553880096241affbf56ec882174d5f9402c2 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 10:22:31 -0400
Subject: [PATCH 006/118] Bump github/codeql-action from 3.26.3 to 3.26.4
(#2393)
Bumps [github/codeql-action](https://github.com/github/codeql-action)
from 3.26.3 to 3.26.4.
Changelog
Sourced from github/codeql-action's
changelog.
CodeQL Action Changelog
See the releases
page for the relevant changes to the CodeQL CLI and language
packs.
Note that the only difference between v2
and
v3
of the CodeQL Action is the node version they support,
with v3
running on node 20 while we continue to release
v2
to support running on node 16. For example
3.22.11
was the first v3
release and is
functionally identical to 2.22.11
. This approach ensures an
easy way to track exactly which features are included in different
versions, indicated by the minor and patch version numbers.
[UNRELEASED]
No user facing changes.
3.26.4 - 21 Aug 2024
- Deprecation: The
add-snippets
input on the
analyze
Action is deprecated and will be removed in the
first release in August 2025. #2436
- Fix an issue where the disk usage system call used for telemetry
would fail on MacOS ARM machines with System Integrity Protection
disabled, and then surface a warning. The system call is now disabled
for these machines. #2434
3.26.3 - 19 Aug 2024
- Fix an issue where the CodeQL Action could not write diagnostic
messages on Windows. This issue did not impact analysis quality. #2430
3.26.2 - 14 Aug 2024
- Update default CodeQL bundle version to 2.18.2. #2417
3.26.1 - 13 Aug 2024
No user facing changes.
3.26.0 - 06 Aug 2024
- Deprecation: Swift analysis on Ubuntu runner images is no
longer supported. Please migrate to a macOS runner if this affects you.
#2403
- Bump the minimum CodeQL bundle version to 2.13.5. #2408
3.25.15 - 26 Jul 2024
- Update default CodeQL bundle version to 2.18.1. #2385
3.25.14 - 25 Jul 2024
- Experimental: add a new
start-proxy
action which starts
the same HTTP proxy as used by github/dependabot-action
.
Do not use this in production as it is part of an internal experiment
and subject to change at any time. #2376
3.25.13 - 19 Jul 2024
- Add
codeql-version
to outputs. #2368
- Add a deprecation warning for customers using CodeQL version 2.13.4
and earlier. These versions of CodeQL were discontinued on 9 July 2024
alongside GitHub Enterprise Server 3.9, and will be unsupported by
CodeQL Action versions 3.26.0 and later and versions 2.26.0 and later.
#2375
- If you are using one of these versions, please update to CodeQL CLI
version 2.13.5 or later. For instance, if you have specified a custom
version of the CLI using the 'tools' input to the 'init' Action, you can
remove this input to use the default version.
- Alternatively, if you want to continue using a version of the CodeQL
CLI between 2.12.6 and 2.13.4, you can replace
github/codeql-action/*@v3
by
github/codeql-action/*@v3.25.13
and
github/codeql-action/*@v2
by
github/codeql-action/*@v2.25.13
in your code scanning
workflow to ensure you continue using this version of the CodeQL
Action.
3.25.12 - 12 Jul 2024
- Improve the reliability and performance of analyzing code when
analyzing a compiled language with the
autobuild
build
mode on GitHub Enterprise Server. This feature is already available
to GitHub.com users. #2353
... (truncated)
Commits
f0f3afe
Merge main into releases/v3 (#2437)
e354359
Update changelog for v3.26.4
ae01f80
Merge pull request #2436
from rvermeulen/rvermeulen/deprecate-add-snippets
72bc3f7
Address incorrect changelog location
7388c47
Merge branch 'main' into rvermeulen/deprecate-add-snippets
d7c48ef
Add link to PR deprecating add-snippets
to
CHANGELOG.md
ec21b8f
Update changelog with deprecation.
4067cda
Add deprecation message to add-snippets
input.
202b3b9
Stop checking disk usage for MacOS ARM with SIP disabled (#2434)
512e306
Merge pull request #2404
from github/marcogario/proxy_64
- Additional commits viewable in compare
view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/scorecards-analysis.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 5ec3cb3917f..093fb0a06a4 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -50,6 +50,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@883d8588e56d1753a8a58c1c86e88976f0c23449
+ uses: github/codeql-action/upload-sarif@f0f3afee809481da311ca3a6ff1ff51d81dbeb24
with:
sarif_file: results.sarif
From 31d3120d950542df44d0c721640be56a5834f707 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 10:22:44 -0400
Subject: [PATCH 007/118] Bump actions/setup-java from 4.2.1 to 4.2.2 (#2378)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Bumps [actions/setup-java](https://github.com/actions/setup-java) from
4.2.1 to 4.2.2.
Release notes
Sourced from actions/setup-java's
releases.
v4.2.2
What's Changed
Bug fixes:
Documentation changes
Dependency updates:
Full Changelog: https://github.com/actions/setup-java/compare/v4...v4.2.2
Commits
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/beta.yml | 6 +++---
.github/workflows/main.yml | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml
index d53d03d1f18..48182366cfb 100644
--- a/.github/workflows/beta.yml
+++ b/.github/workflows/beta.yml
@@ -27,7 +27,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
+ - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018
with:
distribution: 'zulu'
java-version: '17'
@@ -42,7 +42,7 @@ jobs:
if: github.repository == 'flutter/samples'
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
+ - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018
with:
distribution: 'zulu'
java-version: '17'
@@ -57,7 +57,7 @@ jobs:
if: github.repository == 'flutter/samples'
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
+ - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018
with:
distribution: 'zulu'
java-version: '17'
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 9fb131a637c..4747c2bc813 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -28,7 +28,7 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
+ - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018
with:
distribution: 'zulu'
java-version: '17'
@@ -51,7 +51,7 @@ jobs:
if: github.repository == 'flutter/samples'
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
+ - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018
with:
distribution: 'zulu'
java-version: '17'
@@ -64,7 +64,7 @@ jobs:
if: github.repository == 'flutter/samples'
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
+ - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018
with:
distribution: 'zulu'
java-version: '17'
From 63a716671bd169995fbe244eb3497fcd3fff871b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 10:23:06 -0400
Subject: [PATCH 008/118] Bump pigeon from 21.2.0 to 22.0.0 in
/add_to_app/books/flutter_module_books (#2392)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Bumps [pigeon](https://github.com/flutter/packages/tree/main/packages)
from 21.2.0 to 22.0.0.
Commits
6dd3e4e
[pigeon] simplifies int handling across the codec, verifies ints in
collectio...
f63faf3
[interactive_media_ads]: Bump androidx.annotation:annotation from 1.8.1
to 1....
7c95aa6
[interactive_media_ads] Adds a contribution doc (#7460)
ee0ad75
[webview]: Bump androidx.annotation:annotation from 1.8.1 to 1.8.2 in
/packag...
c5d03ee
[many] Remove dependency on kotlin-bom
(#7088)
2703d10
Remove unnecessary breaks in default clauses of switch statements (#7462)
4e5d47e
[webview_flutter] Endorse macOS (#7457)
89154b3
[flutter_adaptive_scaffold] Fix landscape not showing in andUp (#7425)
1ab1a71
[go_router] Fixes replace and pushReplacement uri when only one route…
(#7433)
871cd47
[go_router] Fixes an issue where android back button pops wrong page.
(#7348)
- Additional commits viewable in compare
view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
add_to_app/books/flutter_module_books/pubspec.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/add_to_app/books/flutter_module_books/pubspec.yaml b/add_to_app/books/flutter_module_books/pubspec.yaml
index 9b2e31fad42..89f7d111859 100644
--- a/add_to_app/books/flutter_module_books/pubspec.yaml
+++ b/add_to_app/books/flutter_module_books/pubspec.yaml
@@ -15,7 +15,7 @@ dependencies:
dev_dependencies:
analysis_defaults:
path: ../../../analysis_defaults
- pigeon: ">=11.0.0 <22.0.0"
+ pigeon: ">=11.0.0 <23.0.0"
flutter_test:
sdk: flutter
From cd5956dd5d95c5d5cd84cae4234a053394b8e70f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 26 Aug 2024 11:25:09 +0200
Subject: [PATCH 009/118] Bump github/codeql-action from 3.26.4 to 3.26.5
(#2395)
---
.github/workflows/scorecards-analysis.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 093fb0a06a4..b06dc77dfa1 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -50,6 +50,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@f0f3afee809481da311ca3a6ff1ff51d81dbeb24
+ uses: github/codeql-action/upload-sarif@2c779ab0d087cd7fe7b826087247c2c81f27bfa6
with:
sarif_file: results.sarif
From b701393f8d821c8c4f9f4bec3740b65c3295742f Mon Sep 17 00:00:00 2001
From: Seth Ladd
Date: Tue, 27 Aug 2024 18:38:10 -0700
Subject: [PATCH 010/118] remove outdated links at bottom of README (#2400)
*Replace this paragraph with a description of what this PR is changing
or adding, and why. Consider including before/after screenshots.*
*List which issues are fixed by this PR. For larger changes, raising an
issue first helps
reduce redundant work.*
## Pre-launch Checklist
- [x] I read the [Flutter Style Guide] _recently_, and have followed its
advice.
- [x] I signed the [CLA].
- [x] I read the [Contributors Guide].
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] All existing and new tests are passing.
If you need help, consider asking for advice on the #hackers-devrel
channel on [Discord].
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md
[CLA]: https://cla.developers.google.com/
[Discord]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md
[Contributors Guide]:
https://github.com/flutter/samples/blob/main/CONTRIBUTING.md
---
add_to_app/README.md | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/add_to_app/README.md b/add_to_app/README.md
index 4963ede3aac..dc19f20421b 100644
--- a/add_to_app/README.md
+++ b/add_to_app/README.md
@@ -51,14 +51,7 @@ module](https://docs.flutter.dev/add-to-app/debugging). This will
allow you to hot reload, set breakpoints, and use DevTools and other debugging
functionality, similar to a full Flutter app.
-## Questions/issues
-
-If you have a general question about incorporating Flutter into an existing
-iOS or Android app, the best places to go are:
-
-* [The FlutterDev Google Group](https://groups.google.com/forum/#!forum/flutter-dev)
-* [The Flutter Gitter channel](https://gitter.im/flutter/flutter)
-* [StackOverflow](https://stackoverflow.com/questions/tagged/flutter)
+## Issues
If you run into an issue with the sample itself, please file an issue
in the [main Flutter repo](https://github.com/flutter/flutter/issues).
From 4a3cc9d4f9a903ce43ea3d4f1b4702e3bc4661e5 Mon Sep 17 00:00:00 2001
From: Seth Ladd
Date: Tue, 27 Aug 2024 18:39:25 -0700
Subject: [PATCH 011/118] explicitly say how to launch the app for iOS (#2401)
*Replace this paragraph with a description of what this PR is changing
or adding, and why. Consider including before/after screenshots.*
*List which issues are fixed by this PR. For larger changes, raising an
issue first helps
reduce redundant work.*
## Pre-launch Checklist
- [x] I read the [Flutter Style Guide] _recently_, and have followed its
advice.
- [x] I signed the [CLA].
- [x] I read the [Contributors Guide].
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] All existing and new tests are passing.
If you need help, consider asking for advice on the #hackers-devrel
channel on [Discord].
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md
[CLA]: https://cla.developers.google.com/
[Discord]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md
[Contributors Guide]:
https://github.com/flutter/samples/blob/main/CONTRIBUTING.md
---
add_to_app/fullscreen/README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/add_to_app/fullscreen/README.md b/add_to_app/fullscreen/README.md
index 89b04091608..8abc792c83a 100644
--- a/add_to_app/fullscreen/README.md
+++ b/add_to_app/fullscreen/README.md
@@ -38,6 +38,7 @@ you're building for both iOS and Android, with both toolchains installed):
cd ../ios_fullscreen
pod install
open IOSFullScreen.xcworkspace
+ # Then, click "Run" in Xcode to launch the app into your Simulator or device
```
## Requirements
From f4e92d710d52f2b0f10557dd4183c273a0516470 Mon Sep 17 00:00:00 2001
From: Seth Ladd
Date: Wed, 28 Aug 2024 17:59:36 -0700
Subject: [PATCH 012/118] Update font to match Cupertino (#2410)
updating font to more closely align with system font
*List which issues are fixed by this PR. For larger changes, raising an
issue first helps
reduce redundant work.*
## Pre-launch Checklist
- [x] I read the [Flutter Style Guide] _recently_, and have followed its
advice.
- [x] I signed the [CLA].
- [ ] I read the [Contributors Guide].
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] All existing and new tests are passing.
If you need help, consider asking for advice on the #hackers-devrel
channel on [Discord].
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md
[CLA]: https://cla.developers.google.com/
[Discord]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md
[Contributors Guide]:
https://github.com/flutter/samples/blob/main/CONTRIBUTING.md
---
veggieseasons/lib/styles.dart | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/veggieseasons/lib/styles.dart b/veggieseasons/lib/styles.dart
index 71151fd6f9d..3a136fd9418 100644
--- a/veggieseasons/lib/styles.dart
+++ b/veggieseasons/lib/styles.dart
@@ -14,7 +14,7 @@ abstract class Styles {
fontSize: 16,
fontWeight: FontWeight.normal,
fontStyle: FontStyle.normal,
- fontFamily: 'NotoSans',
+ fontFamily: 'CupertinoSystemText',
letterSpacing: -0.41,
decoration: TextDecoration.none,
),
From 4c753b2a4ae60fa47ac141a0263811d0fec4e4e0 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 29 Aug 2024 12:09:20 +1000
Subject: [PATCH 013/118] Bump fl_chart from 0.68.0 to 0.69.0 in
/experimental/pedometer/example (#2399)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Bumps [fl_chart](https://github.com/imaNNeo/fl_chart) from 0.68.0 to
0.69.0.
Release notes
Sourced from fl_chart's
releases.
0.69.0
- BUGFIX (by
@imaNNeo
) Fix a
memory leak issue in the axis-based charts, there was a logic to
calculate and cache the minX, maxX, minY and maxY properties to reduce
the computation cost. But it caused some memory issues, as we don't have
a quick solution for this, we disabled the caching logic for now, later
we can move the calculation logic to the render objects to keep and
update them only when the data is changed, #1106,
#1693
- BUGFIX (by
@imaNNeo
) Fix
showing grid lines even when there is no line to show in the LineChart,
#1691
- IMPROVEMENT (by
@sczesla
) Allow
users to control minIncluded and maxIncluded using SideTitles, #906
- IMPROVEMENT (by
@elizabethzhenliu
)
Reverse the touch order in ScatterChart, so now the top spots are
touched first, #1675
- IMPROVEMENT (by
@ksw2000
) Remove
redundant math import, #1683
- IMPROVEMENT (by
@Neer-Pathak
)
Fix linux example build issue, #1668
- IMPROVEMENT (by
@TobiasRump
)
Update the bar chart documentation, #1662
Changelog
Sourced from fl_chart's
changelog.
0.69.0
- BUGFIX (by
@imaNNeo
) Fix a
memory leak issue in the axis-based charts, there was a logic to
calculate and cache the minX, maxX, minY and maxY properties to reduce
the computation cost. But it caused some memory issues, as we don't have
a quick solution for this, we disabled the caching logic for now, later
we can move the calculation logic to the render objects to keep and
update them only when the data is changed, #1106,
#1693
- BUGFIX (by
@imaNNeo
) Fix
showing grid lines even when there is no line to show in the LineChart,
#1691
- IMPROVEMENT (by
@sczesla
) Allow
users to control minIncluded and maxIncluded using SideTitles, #906
- IMPROVEMENT (by
@elizabethzhenliu
)
Reverse the touch order in ScatterChart, so now the top spots are
touched first, #1675
- IMPROVEMENT (by
@ksw2000
) Remove
redundant math import, #1683
- IMPROVEMENT (by
@Neer-Pathak
)
Fix linux example build issue, #1668
- IMPROVEMENT (by
@TobiasRump
)
Update the bar chart documentation, #1662
Commits
a6c274c
Bump version to 0.69.0
b0a50a4
Update CHANGELOG.md
f5af4e5
Update bar_chart.md to fix #1608
a6b2d24
fix: Linux Example App Build
99ae675
Update CHANGELOG.md
37371d8
fixed touch detection to select topmost spot. Spots are rendered in
order so ...
5a9606b
Remove redundant import of 'dart:math'
9fc2628
Code formatting
39985b0
Adding change #906
change to CHANGELOG
ed1bdcb
Adding unit test to check forwarding of minIncluded/maxIncluded via
sideTitles
- Additional commits viewable in compare
view
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
experimental/pedometer/example/pubspec.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/experimental/pedometer/example/pubspec.yaml b/experimental/pedometer/example/pubspec.yaml
index 986cdfccc3a..2fab2e7a731 100644
--- a/experimental/pedometer/example/pubspec.yaml
+++ b/experimental/pedometer/example/pubspec.yaml
@@ -42,7 +42,7 @@ dependencies:
ffi: ^2.1.2
intl: ^0.19.0
jni: ^0.10.1
- fl_chart: ^0.68.0
+ fl_chart: ^0.69.0
dev_dependencies:
flutter_test:
From 5fd144aa2a0cd6bbc6527878fb5d458bc633202f Mon Sep 17 00:00:00 2001
From: Seth Ladd
Date: Wed, 28 Aug 2024 19:10:24 -0700
Subject: [PATCH 014/118] matching issue tracker to top-level samples README
(#2405)
*Replace this paragraph with a description of what this PR is changing
or adding, and why. Consider including before/after screenshots.*
*List which issues are fixed by this PR. For larger changes, raising an
issue first helps
reduce redundant work.*
## Pre-launch Checklist
- [x] I read the [Flutter Style Guide] _recently_, and have followed its
advice.
- [x] I signed the [CLA].
- [x] I read the [Contributors Guide].
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] All existing and new tests are passing.
If you need help, consider asking for advice on the #hackers-devrel
channel on [Discord].
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md
[CLA]: https://cla.developers.google.com/
[Discord]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md
[Contributors Guide]:
https://github.com/flutter/samples/blob/main/CONTRIBUTING.md
---
add_to_app/README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/add_to_app/README.md b/add_to_app/README.md
index dc19f20421b..1072f48a42f 100644
--- a/add_to_app/README.md
+++ b/add_to_app/README.md
@@ -54,4 +54,4 @@ functionality, similar to a full Flutter app.
## Issues
If you run into an issue with the sample itself, please file an issue
-in the [main Flutter repo](https://github.com/flutter/flutter/issues).
+in the [Flutter samples repo](https://github.com/flutter/samples/issues).
From 11d1e98370ae6eb055f222ccc4bed3bb974acdeb Mon Sep 17 00:00:00 2001
From: Brett Morgan
Date: Thu, 29 Aug 2024 14:39:56 +1000
Subject: [PATCH 015/118] Update `veggieseasons` Runners (#2411)
This PR updates `veggieseasons` to use current Runners for iOS and macOS
## Pre-launch Checklist
- [x] I read the [Flutter Style Guide] _recently_, and have followed its
advice.
- [x] I signed the [CLA].
- [x] I read the [Contributors Guide].
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] All existing and new tests are passing.
If you need help, consider asking for advice on the #hackers-devrel
channel on [Discord].
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md
[CLA]: https://cla.developers.google.com/
[Discord]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md
[Contributors Guide]:
https://github.com/flutter/samples/blob/main/CONTRIBUTING.md
---
veggieseasons/.metadata | 27 +-
veggieseasons/ios/.gitignore | 3 +-
.../ios/Flutter/AppFrameworkInfo.plist | 4 +-
veggieseasons/ios/Flutter/Debug.xcconfig | 1 -
veggieseasons/ios/Flutter/Release.xcconfig | 1 -
veggieseasons/ios/Podfile | 5 +-
.../ios/Runner.xcodeproj/project.pbxproj | 310 +++++++++++++-----
.../xcshareddata/IDEWorkspaceChecks.plist | 8 +
.../xcshareddata/WorkspaceSettings.xcsettings | 8 +
.../xcshareddata/xcschemes/Runner.xcscheme | 21 +-
.../xcshareddata/WorkspaceSettings.xcsettings | 8 +
veggieseasons/ios/Runner/AppDelegate.swift | 4 +-
.../ios/Runner/Base.lproj/Main.storyboard | 2 +-
veggieseasons/ios/Runner/Info.plist | 14 +-
.../ios/RunnerTests/RunnerTests.swift | 12 +
veggieseasons/macos/.gitignore | 1 +
.../macos/Flutter/Flutter-Debug.xcconfig | 2 +-
.../macos/Flutter/Flutter-Release.xcconfig | 2 +-
veggieseasons/macos/Podfile | 5 +-
.../macos/Runner.xcodeproj/project.pbxproj | 238 +++++++++++---
.../contents.xcworkspacedata | 7 -
.../xcshareddata/xcschemes/Runner.xcscheme | 33 +-
veggieseasons/macos/Runner/AppDelegate.swift | 2 +-
.../AppIcon.appiconset/app_icon_1024.png | Bin 46993 -> 102994 bytes
.../AppIcon.appiconset/app_icon_128.png | Bin 3276 -> 5680 bytes
.../AppIcon.appiconset/app_icon_16.png | Bin 1429 -> 520 bytes
.../AppIcon.appiconset/app_icon_256.png | Bin 5933 -> 14142 bytes
.../AppIcon.appiconset/app_icon_32.png | Bin 1243 -> 1066 bytes
.../AppIcon.appiconset/app_icon_512.png | Bin 14800 -> 36406 bytes
.../AppIcon.appiconset/app_icon_64.png | Bin 1874 -> 2218 bytes
.../macos/Runner/Base.lproj/MainMenu.xib | 4 +
.../macos/Runner/Configs/AppInfo.xcconfig | 4 +-
.../macos/Runner/MainFlutterWindow.swift | 2 +-
.../macos/RunnerTests/RunnerTests.swift | 12 +
34 files changed, 568 insertions(+), 172 deletions(-)
create mode 100644 veggieseasons/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
create mode 100644 veggieseasons/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
create mode 100644 veggieseasons/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
create mode 100644 veggieseasons/ios/RunnerTests/RunnerTests.swift
delete mode 100644 veggieseasons/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
create mode 100644 veggieseasons/macos/RunnerTests/RunnerTests.swift
diff --git a/veggieseasons/.metadata b/veggieseasons/.metadata
index e092c092b85..9c1959ee017 100644
--- a/veggieseasons/.metadata
+++ b/veggieseasons/.metadata
@@ -4,7 +4,30 @@
# This file should be version controlled and should not be manually edited.
version:
- revision: 9299c02cf708497d6f72edda8efae0bb8340660e
- channel: beta
+ revision: "5874a72aa4c779a02553007c47dacbefba2374dc"
+ channel: "stable"
project_type: app
+
+# Tracks metadata for the flutter migrate command
+migration:
+ platforms:
+ - platform: root
+ create_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ base_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ - platform: ios
+ create_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ base_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ - platform: macos
+ create_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ base_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+
+ # User provided section
+
+ # List of Local paths (relative to this file) that should be
+ # ignored by the migrate tool.
+ #
+ # Files that are not part of the templates will be ignored by default.
+ unmanaged_files:
+ - 'lib/main.dart'
+ - 'ios/Runner.xcodeproj/project.pbxproj'
diff --git a/veggieseasons/ios/.gitignore b/veggieseasons/ios/.gitignore
index 48744a87128..7a7f9873ad7 100644
--- a/veggieseasons/ios/.gitignore
+++ b/veggieseasons/ios/.gitignore
@@ -1,3 +1,4 @@
+**/dgph
*.mode1v3
*.mode2v3
*.moved-aside
@@ -18,13 +19,13 @@ Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
+Flutter/ephemeral/
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*
-/build/
# Exceptions to above rules.
!default.mode1v3
diff --git a/veggieseasons/ios/Flutter/AppFrameworkInfo.plist b/veggieseasons/ios/Flutter/AppFrameworkInfo.plist
index f2872cf474e..7c569640062 100644
--- a/veggieseasons/ios/Flutter/AppFrameworkInfo.plist
+++ b/veggieseasons/ios/Flutter/AppFrameworkInfo.plist
@@ -3,7 +3,7 @@
CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
+ en
CFBundleExecutable
App
CFBundleIdentifier
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 9.0
+ 12.0
diff --git a/veggieseasons/ios/Flutter/Debug.xcconfig b/veggieseasons/ios/Flutter/Debug.xcconfig
index b2f5fae9c25..ec97fc6f302 100644
--- a/veggieseasons/ios/Flutter/Debug.xcconfig
+++ b/veggieseasons/ios/Flutter/Debug.xcconfig
@@ -1,3 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
-#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
diff --git a/veggieseasons/ios/Flutter/Release.xcconfig b/veggieseasons/ios/Flutter/Release.xcconfig
index 88c29144c83..c4855bfe200 100644
--- a/veggieseasons/ios/Flutter/Release.xcconfig
+++ b/veggieseasons/ios/Flutter/Release.xcconfig
@@ -1,3 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
-#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
diff --git a/veggieseasons/ios/Podfile b/veggieseasons/ios/Podfile
index 1e8c3c90a55..d97f17e223f 100644
--- a/veggieseasons/ios/Podfile
+++ b/veggieseasons/ios/Podfile
@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
-# platform :ios, '9.0'
+# platform :ios, '12.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
@@ -32,6 +32,9 @@ target 'Runner' do
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
+ target 'RunnerTests' do
+ inherit! :search_paths
+ end
end
post_install do |installer|
diff --git a/veggieseasons/ios/Runner.xcodeproj/project.pbxproj b/veggieseasons/ios/Runner.xcodeproj/project.pbxproj
index 10faccb9aeb..ab82aea2bc3 100644
--- a/veggieseasons/ios/Runner.xcodeproj/project.pbxproj
+++ b/veggieseasons/ios/Runner.xcodeproj/project.pbxproj
@@ -3,19 +3,31 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 46;
+ objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
- 2E95CE9079F9F85ED7195813 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0AD80F83341224E3A8E331A3 /* Pods_Runner.framework */; };
+ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 63DF5AF6EA7E5752FD193C17 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38D833D84C3CBFFBC2A61387 /* Pods_Runner.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
+ BDDC9E5BD53006E983AC444C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C7D1011F5450B20EBA2923B /* Pods_RunnerTests.framework */; };
/* End PBXBuildFile section */
+/* Begin PBXContainerItemProxy section */
+ 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 97C146E61CF9000F007C117D /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 97C146ED1CF9000F007C117D;
+ remoteInfo = Runner;
+ };
+/* End PBXContainerItemProxy section */
+
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
@@ -30,14 +42,21 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- 0AD80F83341224E3A8E331A3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
+ 1D00FE80EC6A4B68C8E227F8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
+ 2E0D48114CA3C6D9CCFFEF16 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; };
+ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
+ 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 38D833D84C3CBFFBC2A61387 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
- 4AD930A692F4F8E268DBD0A5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
+ 5C5AC2EFB5606C655AB6C34A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; };
+ 5C7D1011F5450B20EBA2923B /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 67C3CA414545302E36760BB5 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
+ 971FE7CB47EC26D3DD304A6B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -45,8 +64,7 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- AD1A5E1763BFC877DB2B446F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
- FA5155759DF040A4C0CC04E0 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
+ FA6AACB3CDFE5B8D169FDAD3 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -54,29 +72,50 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 2E95CE9079F9F85ED7195813 /* Pods_Runner.framework in Frameworks */,
+ 63DF5AF6EA7E5752FD193C17 /* Pods_Runner.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C3870E06F7C4E0C4CA0F4C1C /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BDDC9E5BD53006E983AC444C /* Pods_RunnerTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 22B442D4168A7B892F29E026 /* Frameworks */ = {
+ 1AC2876AB73DE877F0C0B83B /* Pods */ = {
isa = PBXGroup;
children = (
- 0AD80F83341224E3A8E331A3 /* Pods_Runner.framework */,
+ 971FE7CB47EC26D3DD304A6B /* Pods-Runner.debug.xcconfig */,
+ 67C3CA414545302E36760BB5 /* Pods-Runner.release.xcconfig */,
+ 1D00FE80EC6A4B68C8E227F8 /* Pods-Runner.profile.xcconfig */,
+ 2E0D48114CA3C6D9CCFFEF16 /* Pods-RunnerTests.debug.xcconfig */,
+ FA6AACB3CDFE5B8D169FDAD3 /* Pods-RunnerTests.release.xcconfig */,
+ 5C5AC2EFB5606C655AB6C34A /* Pods-RunnerTests.profile.xcconfig */,
+ );
+ name = Pods;
+ path = Pods;
+ sourceTree = "";
+ };
+ 331C8082294A63A400263BE5 /* RunnerTests */ = {
+ isa = PBXGroup;
+ children = (
+ 331C807B294A618700263BE5 /* RunnerTests.swift */,
);
- name = Frameworks;
+ path = RunnerTests;
sourceTree = "";
};
- 7C8B7C066005877B50E89DBE /* Pods */ = {
+ 4968362A1680EFDF9222A5B5 /* Frameworks */ = {
isa = PBXGroup;
children = (
- AD1A5E1763BFC877DB2B446F /* Pods-Runner.debug.xcconfig */,
- 4AD930A692F4F8E268DBD0A5 /* Pods-Runner.release.xcconfig */,
- FA5155759DF040A4C0CC04E0 /* Pods-Runner.profile.xcconfig */,
+ 38D833D84C3CBFFBC2A61387 /* Pods_Runner.framework */,
+ 5C7D1011F5450B20EBA2923B /* Pods_RunnerTests.framework */,
);
- path = Pods;
+ name = Frameworks;
sourceTree = "";
};
9740EEB11CF90186004384FC /* Flutter */ = {
@@ -96,8 +135,9 @@
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
- 7C8B7C066005877B50E89DBE /* Pods */,
- 22B442D4168A7B892F29E026 /* Frameworks */,
+ 331C8082294A63A400263BE5 /* RunnerTests */,
+ 1AC2876AB73DE877F0C0B83B /* Pods */,
+ 4968362A1680EFDF9222A5B5 /* Frameworks */,
);
sourceTree = "";
};
@@ -105,6 +145,7 @@
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
+ 331C8081294A63A400263BE5 /* RunnerTests.xctest */,
);
name = Products;
sourceTree = "";
@@ -116,7 +157,6 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
- 97C146F11CF9000F007C117D /* Supporting Files */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
@@ -125,28 +165,40 @@
path = Runner;
sourceTree = "";
};
- 97C146F11CF9000F007C117D /* Supporting Files */ = {
- isa = PBXGroup;
- children = (
- );
- name = "Supporting Files";
- sourceTree = "";
- };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
+ 331C8080294A63A400263BE5 /* RunnerTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
+ buildPhases = (
+ EEF989F59E37C6946EC40F1B /* [CP] Check Pods Manifest.lock */,
+ 331C807D294A63A400263BE5 /* Sources */,
+ 331C807F294A63A400263BE5 /* Resources */,
+ C3870E06F7C4E0C4CA0F4C1C /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 331C8086294A63A400263BE5 /* PBXTargetDependency */,
+ );
+ name = RunnerTests;
+ productName = RunnerTests;
+ productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
- E3A3864E2B275E7A06552155 /* [CP] Check Pods Manifest.lock */,
+ 25194613EC4035A63337D2AA /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
- 8F50AE35C319C5A3612840AA /* [CP] Embed Pods Frameworks */,
+ 1F3480CB2DDBB3AE2233D2E2 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -163,9 +215,14 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1020;
+ BuildIndependentTargetsInParallel = YES;
+ LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
+ 331C8080294A63A400263BE5 = {
+ CreatedOnToolsVersion = 14.0;
+ TestTargetID = 97C146ED1CF9000F007C117D;
+ };
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 1100;
@@ -173,7 +230,7 @@
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
- compatibilityVersion = "Xcode 3.2";
+ compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -186,11 +243,19 @@
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
+ 331C8080294A63A400263BE5 /* RunnerTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
+ 331C807F294A63A400263BE5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -205,40 +270,64 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
- 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+ 1F3480CB2DDBB3AE2233D2E2 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 25194613EC4035A63337D2AA /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
+ inputFileListPaths = (
+ );
inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
);
- name = "Thin Binary";
outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
};
- 8F50AE35C319C5A3612840AA /* [CP] Embed Pods Frameworks */ = {
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
- "${BUILT_PRODUCTS_DIR}/shared_preferences/shared_preferences.framework",
+ "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
- name = "[CP] Embed Pods Frameworks";
+ name = "Thin Binary";
outputPaths = (
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -251,7 +340,7 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
- E3A3864E2B275E7A06552155 /* [CP] Check Pods Manifest.lock */ = {
+ EEF989F59E37C6946EC40F1B /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -266,7 +355,7 @@
outputFileListPaths = (
);
outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
+ "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -276,6 +365,14 @@
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
+ 331C807D294A63A400263BE5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -287,6 +384,14 @@
};
/* End PBXSourcesBuildPhase section */
+/* Begin PBXTargetDependency section */
+ 331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 97C146ED1CF9000F007C117D /* Runner */;
+ targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
@@ -311,6 +416,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -340,6 +446,7 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -348,7 +455,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -363,19 +470,15 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
- CURRENT_PROJECT_VERSION = 8;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Flutter",
- );
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = TC87DMJLQP;
+ ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- LIBRARY_SEARCH_PATHS = (
+ LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
- "$(PROJECT_DIR)/Flutter",
+ "@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.2.0;
- PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.VeggieSeasons;
+ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.veggieseasons;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
@@ -383,10 +486,61 @@
};
name = Profile;
};
+ 331C8088294A63A400263BE5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 2E0D48114CA3C6D9CCFFEF16 /* Pods-RunnerTests.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.veggieseasons.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
+ };
+ name = Debug;
+ };
+ 331C8089294A63A400263BE5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = FA6AACB3CDFE5B8D169FDAD3 /* Pods-RunnerTests.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.veggieseasons.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
+ };
+ name = Release;
+ };
+ 331C808A294A63A400263BE5 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 5C5AC2EFB5606C655AB6C34A /* Pods-RunnerTests.profile.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.veggieseasons.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
+ };
+ name = Profile;
+ };
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -416,6 +570,7 @@
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
@@ -430,7 +585,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -442,6 +597,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -471,6 +627,7 @@
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -479,11 +636,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
@@ -495,19 +653,15 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
- CURRENT_PROJECT_VERSION = 8;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Flutter",
- );
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = TC87DMJLQP;
+ ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- LIBRARY_SEARCH_PATHS = (
+ LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
- "$(PROJECT_DIR)/Flutter",
+ "@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.2.0;
- PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.VeggieSeasons;
+ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.veggieseasons;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -522,19 +676,15 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
- CURRENT_PROJECT_VERSION = 8;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Flutter",
- );
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = TC87DMJLQP;
+ ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- LIBRARY_SEARCH_PATHS = (
+ LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
- "$(PROJECT_DIR)/Flutter",
+ "@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.2.0;
- PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.VeggieSeasons;
+ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.veggieseasons;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
@@ -545,6 +695,16 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
+ 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 331C8088294A63A400263BE5 /* Debug */,
+ 331C8089294A63A400263BE5 /* Release */,
+ 331C808A294A63A400263BE5 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/veggieseasons/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/veggieseasons/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000000..18d981003d6
--- /dev/null
+++ b/veggieseasons/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/veggieseasons/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/veggieseasons/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 00000000000..f9b0d7c5ea1
--- /dev/null
+++ b/veggieseasons/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/veggieseasons/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/veggieseasons/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index a28140cfdb3..8e3ca5dfe19 100644
--- a/veggieseasons/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/veggieseasons/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
-
-
-
-
+
+
+
+
+
+
-
-
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/veggieseasons/ios/Runner/AppDelegate.swift b/veggieseasons/ios/Runner/AppDelegate.swift
index 70693e4a8c1..626664468b8 100644
--- a/veggieseasons/ios/Runner/AppDelegate.swift
+++ b/veggieseasons/ios/Runner/AppDelegate.swift
@@ -1,7 +1,7 @@
-import UIKit
import Flutter
+import UIKit
-@UIApplicationMain
+@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
diff --git a/veggieseasons/ios/Runner/Base.lproj/Main.storyboard b/veggieseasons/ios/Runner/Base.lproj/Main.storyboard
index 9025e9a9bd3..f3c28516fb3 100644
--- a/veggieseasons/ios/Runner/Base.lproj/Main.storyboard
+++ b/veggieseasons/ios/Runner/Base.lproj/Main.storyboard
@@ -8,7 +8,7 @@
-
+
diff --git a/veggieseasons/ios/Runner/Info.plist b/veggieseasons/ios/Runner/Info.plist
index 79c219c0dae..c985223fc7f 100644
--- a/veggieseasons/ios/Runner/Info.plist
+++ b/veggieseasons/ios/Runner/Info.plist
@@ -3,9 +3,9 @@
CFBundleDevelopmentRegion
- en
+ $(DEVELOPMENT_LANGUAGE)
CFBundleDisplayName
- Veg. Seasons
+ Veggie Seasons
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
@@ -17,11 +17,11 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- $(MARKETING_VERSION)
+ $(FLUTTER_BUILD_NAME)
CFBundleSignature
????
CFBundleVersion
- $(CURRENT_PROJECT_VERSION)
+ $(FLUTTER_BUILD_NUMBER)
LSRequiresIPhoneOS
UILaunchStoryboardName
@@ -40,7 +40,9 @@
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
- UIViewControllerBasedStatusBarAppearance
-
+ CADisableMinimumFrameDurationOnPhone
+
+ UIApplicationSupportsIndirectInputEvents
+
diff --git a/veggieseasons/ios/RunnerTests/RunnerTests.swift b/veggieseasons/ios/RunnerTests/RunnerTests.swift
new file mode 100644
index 00000000000..86a7c3b1b61
--- /dev/null
+++ b/veggieseasons/ios/RunnerTests/RunnerTests.swift
@@ -0,0 +1,12 @@
+import Flutter
+import UIKit
+import XCTest
+
+class RunnerTests: XCTestCase {
+
+ func testExample() {
+ // If you add code to the Runner application, consider adding tests here.
+ // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
+ }
+
+}
diff --git a/veggieseasons/macos/.gitignore b/veggieseasons/macos/.gitignore
index d2fd3772308..746adbb6b9e 100644
--- a/veggieseasons/macos/.gitignore
+++ b/veggieseasons/macos/.gitignore
@@ -3,4 +3,5 @@
**/Pods/
# Xcode-related
+**/dgph
**/xcuserdata/
diff --git a/veggieseasons/macos/Flutter/Flutter-Debug.xcconfig b/veggieseasons/macos/Flutter/Flutter-Debug.xcconfig
index 785633d3a86..4b81f9b2d20 100644
--- a/veggieseasons/macos/Flutter/Flutter-Debug.xcconfig
+++ b/veggieseasons/macos/Flutter/Flutter-Debug.xcconfig
@@ -1,2 +1,2 @@
-#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/veggieseasons/macos/Flutter/Flutter-Release.xcconfig b/veggieseasons/macos/Flutter/Flutter-Release.xcconfig
index 5fba960c3af..5caa9d1579e 100644
--- a/veggieseasons/macos/Flutter/Flutter-Release.xcconfig
+++ b/veggieseasons/macos/Flutter/Flutter-Release.xcconfig
@@ -1,2 +1,2 @@
-#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/veggieseasons/macos/Podfile b/veggieseasons/macos/Podfile
index dade8dfad0d..c795730db8e 100644
--- a/veggieseasons/macos/Podfile
+++ b/veggieseasons/macos/Podfile
@@ -1,4 +1,4 @@
-platform :osx, '10.11'
+platform :osx, '10.14'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
@@ -31,6 +31,9 @@ target 'Runner' do
use_modular_headers!
flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
+ target 'RunnerTests' do
+ inherit! :search_paths
+ end
end
post_install do |installer|
diff --git a/veggieseasons/macos/Runner.xcodeproj/project.pbxproj b/veggieseasons/macos/Runner.xcodeproj/project.pbxproj
index 805b71cd9ff..3beb5482985 100644
--- a/veggieseasons/macos/Runner.xcodeproj/project.pbxproj
+++ b/veggieseasons/macos/Runner.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 51;
+ objectVersion = 54;
objects = {
/* Begin PBXAggregateTarget section */
@@ -21,15 +21,24 @@
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
+ 0C591566BA30BFA6D780386A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EE22A708C4E7F94406AFD15 /* Pods_Runner.framework */; };
+ 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; };
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
- 439430BC46E7EA4F4AD30C97 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71048CE912B6CDDD9D17E4AB /* Pods_Runner.framework */; };
+ AEA6F424A1A42303F9A597C0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBED630FEBB9A18F27C8E814 /* Pods_RunnerTests.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
+ 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 33CC10EC2044A3C60003C045;
+ remoteInfo = Runner;
+ };
33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
@@ -53,6 +62,8 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; };
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; };
33CC10ED2044A3C60003C045 /* veggieseasons.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = veggieseasons.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -67,26 +78,46 @@
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; };
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; };
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; };
- 58E49E1CFF302F91C6924BD4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
- 5D2B960855C47BF6E34C2800 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
- 71048CE912B6CDDD9D17E4AB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 413A4F2B0013AFEC349AB2C5 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; };
+ 4D8AF33CD5C878ED37254D67 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
+ 4EE22A708C4E7F94406AFD15 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 67C24EB68B67E166AAF91AFC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
- A3B1F279691DA4B9DC4B9D64 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
+ A5460BC7374C6E7592B1FF3E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
+ C1FB72C1E9B25422AFEB740F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; };
+ C518FFB7BDFCCDF5D96D3B89 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
+ DBED630FEBB9A18F27C8E814 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
+ 331C80D2294CF70F00263BE5 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ AEA6F424A1A42303F9A597C0 /* Pods_RunnerTests.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
33CC10EA2044A3C60003C045 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 439430BC46E7EA4F4AD30C97 /* Pods_Runner.framework in Frameworks */,
+ 0C591566BA30BFA6D780386A /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ 331C80D6294CF71000263BE5 /* RunnerTests */ = {
+ isa = PBXGroup;
+ children = (
+ 331C80D7294CF71000263BE5 /* RunnerTests.swift */,
+ );
+ path = RunnerTests;
+ sourceTree = "";
+ };
33BA886A226E78AF003329D5 /* Configs */ = {
isa = PBXGroup;
children = (
@@ -103,9 +134,10 @@
children = (
33FAB671232836740065AC1E /* Runner */,
33CEB47122A05771004F2AC0 /* Flutter */,
+ 331C80D6294CF71000263BE5 /* RunnerTests */,
33CC10EE2044A3C60003C045 /* Products */,
D73912EC22F37F3D000D13A0 /* Frameworks */,
- 34AD685A2B6FBB3AF5835725 /* Pods */,
+ 91771D8FA5A30CAEDA51E26A /* Pods */,
);
sourceTree = "";
};
@@ -113,6 +145,7 @@
isa = PBXGroup;
children = (
33CC10ED2044A3C60003C045 /* veggieseasons.app */,
+ 331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
);
name = Products;
sourceTree = "";
@@ -152,12 +185,15 @@
path = Runner;
sourceTree = "";
};
- 34AD685A2B6FBB3AF5835725 /* Pods */ = {
+ 91771D8FA5A30CAEDA51E26A /* Pods */ = {
isa = PBXGroup;
children = (
- A3B1F279691DA4B9DC4B9D64 /* Pods-Runner.debug.xcconfig */,
- 58E49E1CFF302F91C6924BD4 /* Pods-Runner.release.xcconfig */,
- 5D2B960855C47BF6E34C2800 /* Pods-Runner.profile.xcconfig */,
+ A5460BC7374C6E7592B1FF3E /* Pods-Runner.debug.xcconfig */,
+ C518FFB7BDFCCDF5D96D3B89 /* Pods-Runner.release.xcconfig */,
+ 4D8AF33CD5C878ED37254D67 /* Pods-Runner.profile.xcconfig */,
+ 413A4F2B0013AFEC349AB2C5 /* Pods-RunnerTests.debug.xcconfig */,
+ C1FB72C1E9B25422AFEB740F /* Pods-RunnerTests.release.xcconfig */,
+ 67C24EB68B67E166AAF91AFC /* Pods-RunnerTests.profile.xcconfig */,
);
name = Pods;
path = Pods;
@@ -166,7 +202,8 @@
D73912EC22F37F3D000D13A0 /* Frameworks */ = {
isa = PBXGroup;
children = (
- 71048CE912B6CDDD9D17E4AB /* Pods_Runner.framework */,
+ 4EE22A708C4E7F94406AFD15 /* Pods_Runner.framework */,
+ DBED630FEBB9A18F27C8E814 /* Pods_RunnerTests.framework */,
);
name = Frameworks;
sourceTree = "";
@@ -174,17 +211,36 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
+ 331C80D4294CF70F00263BE5 /* RunnerTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
+ buildPhases = (
+ A9DCAE5A5FC2DAC764BF600F /* [CP] Check Pods Manifest.lock */,
+ 331C80D1294CF70F00263BE5 /* Sources */,
+ 331C80D2294CF70F00263BE5 /* Frameworks */,
+ 331C80D3294CF70F00263BE5 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 331C80DA294CF71000263BE5 /* PBXTargetDependency */,
+ );
+ name = RunnerTests;
+ productName = RunnerTests;
+ productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
33CC10EC2044A3C60003C045 /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
- B2073D6D55F6001DEC2B62B9 /* [CP] Check Pods Manifest.lock */,
+ 6233C4FEDE0E579A6F92072D /* [CP] Check Pods Manifest.lock */,
33CC10E92044A3C60003C045 /* Sources */,
33CC10EA2044A3C60003C045 /* Frameworks */,
33CC10EB2044A3C60003C045 /* Resources */,
33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */,
- 6849C1ABF60468666D275EC3 /* [CP] Embed Pods Frameworks */,
+ 6AA72EDC93A2C61F5DA982D4 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -202,10 +258,15 @@
33CC10E52044A3C60003C045 /* Project object */ = {
isa = PBXProject;
attributes = {
+ BuildIndependentTargetsInParallel = YES;
LastSwiftUpdateCheck = 0920;
- LastUpgradeCheck = 0930;
- ORGANIZATIONNAME = "The Flutter Authors";
+ LastUpgradeCheck = 1510;
+ ORGANIZATIONNAME = "";
TargetAttributes = {
+ 331C80D4294CF70F00263BE5 = {
+ CreatedOnToolsVersion = 14.0;
+ TestTargetID = 33CC10EC2044A3C60003C045;
+ };
33CC10EC2044A3C60003C045 = {
CreatedOnToolsVersion = 9.2;
LastSwiftMigration = 1100;
@@ -223,7 +284,7 @@
};
};
buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
- compatibilityVersion = "Xcode 8.0";
+ compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
@@ -236,12 +297,20 @@
projectRoot = "";
targets = (
33CC10EC2044A3C60003C045 /* Runner */,
+ 331C80D4294CF70F00263BE5 /* RunnerTests */,
33CC111A2044C6BA0003C045 /* Flutter Assemble */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
+ 331C80D3294CF70F00263BE5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
33CC10EB2044A3C60003C045 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -256,6 +325,7 @@
/* Begin PBXShellScriptBuildPhase section */
3399D490228B24CF009A79C7 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -289,27 +359,48 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh\ntouch Flutter/ephemeral/tripwire\n";
+ shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
};
- 6849C1ABF60468666D275EC3 /* [CP] Embed Pods Frameworks */ = {
+ 6233C4FEDE0E579A6F92072D /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
+ inputFileListPaths = (
+ );
inputPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
- "${BUILT_PRODUCTS_DIR}/shared_preferences_macos/shared_preferences_macos.framework",
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
);
- name = "[CP] Embed Pods Frameworks";
outputPaths = (
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences_macos.framework",
+ "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 6AA72EDC93A2C61F5DA982D4 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
- B2073D6D55F6001DEC2B62B9 /* [CP] Check Pods Manifest.lock */ = {
+ A9DCAE5A5FC2DAC764BF600F /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -324,7 +415,7 @@
outputFileListPaths = (
);
outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
+ "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -334,6 +425,14 @@
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
+ 331C80D1294CF70F00263BE5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
33CC10E92044A3C60003C045 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -347,6 +446,11 @@
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
+ 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 33CC10EC2044A3C60003C045 /* Runner */;
+ targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */;
+ };
33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
@@ -367,11 +471,57 @@
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
+ 331C80DB294CF71000263BE5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 413A4F2B0013AFEC349AB2C5 /* Pods-RunnerTests.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.veggieseasons.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/veggieseasons.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/veggieseasons";
+ };
+ name = Debug;
+ };
+ 331C80DC294CF71000263BE5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = C1FB72C1E9B25422AFEB740F /* Pods-RunnerTests.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.veggieseasons.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/veggieseasons.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/veggieseasons";
+ };
+ name = Release;
+ };
+ 331C80DD294CF71000263BE5 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 67C24EB68B67E166AAF91AFC /* Pods-RunnerTests.profile.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.veggieseasons.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/veggieseasons.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/veggieseasons";
+ };
+ name = Profile;
+ };
338D0CE9231458BD00FA5F75 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
@@ -395,9 +545,11 @@
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -405,7 +557,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
@@ -422,10 +574,6 @@
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Flutter/ephemeral",
- );
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -449,6 +597,7 @@
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
@@ -472,9 +621,11 @@
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
@@ -488,7 +639,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
@@ -502,6 +653,7 @@
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
@@ -525,9 +677,11 @@
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -535,7 +689,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- MACOSX_DEPLOYMENT_TARGET = 10.11;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
@@ -552,10 +706,6 @@
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Flutter/ephemeral",
- );
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -576,10 +726,6 @@
CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Flutter/ephemeral",
- );
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -609,6 +755,16 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
+ 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 331C80DB294CF71000263BE5 /* Debug */,
+ 331C80DC294CF71000263BE5 /* Release */,
+ 331C80DD294CF71000263BE5 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/veggieseasons/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/veggieseasons/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 764c74b8df3..00000000000
--- a/veggieseasons/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/veggieseasons/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/veggieseasons/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 506ccd3d4b0..4c216385462 100644
--- a/veggieseasons/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/veggieseasons/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
Bool {
return true
diff --git a/veggieseasons/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/veggieseasons/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
index 3c4935a7ca84f0976aca34b7f2895d65fb94d1ea..82b6f9d9a33e198f5747104729e1fcef999772a5 100644
GIT binary patch
literal 102994
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