Sunday, October 17, 2021

Medium membership bypass, read membership-only articles

Situation:

Opening an article will be prompted with the following

Profile Name, read more from Article Author Name — and everyone else on Medium.

You’ve read all your free member-only stories, become a member to get unlimited access. Your membership fee supports Article Author Name and the voices you want to hear more from.

Solution:
Step 1 : Copy URL of the fenced content
Step 2 : Open Google Chrome, click File
Step 3 : Click New Incognito Window
Step 4 : In Incognito mode, paste copied URL in the address bar.



Done. This technique can be used with browsers that have private / invisible modes e.g Brave, Mozilla Firefox

Wednesday, October 13, 2021

How to Verify downloads with SHA checksum using macOS

 

Step 1: 

Download file from official site or repository and ensure to get the corresponding SHA checksum

For reference, we will be using the following

Downloaded filename : name_of_downloaded_file

Downloaded file's checksum : sha_checksum_of_downloaded_file


Step 2:

Open Terminal


Step 3: 

Run the following command in the Terminal from the directory where file was downloaded

> echo "sha_checksum_of_downloaded_file" *name_of_downloaded_file | shasum -a 256 --check


Step 4: 

Check output or response after executing above command. You should get similar output as below

name_of_downloaded_file: OK


Step 5: Done.



Example (taken from Ubuntu site - https://ubuntu.com/download/server)

> echo "f8e3086f3cea0fb3fefb29937ab5ed9d19e767079633960ccb50e76153effc98 *ubuntu-20.04.3-live-server-amd64.iso" | shasum -a 256 --check

ubuntu-20.04.3-live-server-amd64.iso: OK

Tuesday, October 12, 2021

Flutter : Change Package Name and Bundle ID (iOS, Android, macOS, Linux) using rename package

Procedure for Renaming AppName and Package Name

Example (Current Attributes):

Project Name: projectname

Android: Package Name e.g. com.geekdish.projectname

iOS: Bundle ID e.g com.geekdish.projectname


Step 1: Activate the rename package

From Android Studio, open Terminal and execute the following

> flutter pub global activate rename
Resolving dependencies...
+ args 2.3.0
+ logger 1.1.0
+ rename 1.3.1
Downloading rename 1.3.1...
Downloading logger 1.1.0...
Building package executables...
Built rename:rename.
Installed executable rename.
Warning: Pub installs executables into $HOME/.pub-cache/bin, which is not on your path.
You can fix that by adding this to your shell's config file (.bashrc, .bash_profile, etc.): 
  export PATH="$PATH":"$HOME/.pub-cache/bin"

Activated rename 1.3.1. 

Documents/DEV/flutter took 7s 


Step 2: To change Package name and/or Bundle Id (e.g. com.geekdish.newprojectname):

            Rename package using rename tool

> flutter pub global run rename --bundleId com.geekdish.projectname


Step 3: Verify changes

For Android, in the Android Studio/<appname>/android/app/build.gradle

Check the application Id attribute under defaultConfig element, see below


defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.geekdish.newflutterproject"
minSdkVersion 16
targetSdkVersion 30
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}

For iOS, in Android Studio, right click <app name>/ios open in Xcode

Click Runner, you will see in the General>Identity>Bundle Identifier the new bundleId com.geekdish.projectname

For macOS, in the Android Studio/<appname>/maos/Runner/Configs/AppInfo.xcconfig

Check the PRODUCT_BUNDLE_IDENTIFIER attribute, see below

// Application-level settings for the Runner target.
//
// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
// future. If not, the values below would default to using the project name when this becomes a
// 'flutter create' template.

// The application's name. By default this is also the title of the Flutter window.
PRODUCT_NAME = newflutterproject

// The application's bundle identifier
PRODUCT_BUNDLE_IDENTIFIER = com.geekdish.newappname


Step 4: To change Application Name (e.g. newappname):

            Rename appName using rename tool

> flutter pub global run rename --appname newappname


Step 5: To verify changes:

For Android, in the Android Studio/<appname>/android/app/src/main/AndroidManifest.xml

Check the android:label= attribute under <manifest>/<application> element, see below

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.geekdish.newprojectname">
<application
android:label="newappname"
android:icon="@mipmap/ic_launcher">
<activity

For iOS, in the Android Studio/<appname>/ios/Runner/Info.plist

Check the <string> attribute under <dict>/<key>/<CFBundleName> element, see below

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>newappname</string>

For macOS, in the Android Studio/<appname>/maos/Runner/Configs/AppInfo.xcconfig

Check the PRODUCT_NAME  attribute, see below

// Application-level settings for the Runner target.
//
// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
// future. If not, the values below would default to using the project name when this becomes a
// 'flutter create' template.

// The application's name. By default this is also the title of the Flutter window.
PRODUCT_NAME = newflutterproject



Saturday, October 9, 2021

Change Launcher icon for Flutter apps for both iOS and Android using Android Studio on macOS

 

Create your own icon (preferably 1024x1024 size)

You may use the following tools:

    Android Icon Generator  https://romannurik.githu.io/AndroidAssetStudio

    App Icon Generator https://appicon.co

Using App Icon Generator

Goto https://appicon.co

Drag & drop your icon to this App Icon Generator site.

Select all the platforms to be generated

it will generate and download the file AppIcons.zip

The compressed file will include folders android (for Android) and Assets.xcassets (for iOS)

Using the generated icons:

Inside the zip file are the following for Android: 

android 

android>mipmap-mdpl (smallest)

anndroid>mipmal-xxxhdpi (largest)

Inside the zip file are the following for iOS:  

Assets.xcassets

Assets.xcassets>

Assets.xcassets>


For Android:

Right-click the Android Studio>(project folder)>android/app/src/main/res folder, select Open in>Finder







Select all folders which name that matches those in the compressed file for android and throw them in the trash, then replace those with the folders in the compressed file for android.
copy all folders in AppIcons.zip>android/(folders) to (project)>android/app/main/src/res/

To adjust the image/icon, You can open image asset

Right click android and select Flutter>Open Android Module in Android Studio

Once android window is open, you may choose res and right click to choose Image Asset




Once opened you can pick the Source Asset/Path for the starting image once Finder dialog open , you can select the app_icon.png you get to resize the icon (e.g. for rounded icon, square etc)

once done adjusting click next, image asset will replace existinng with new one by clicking finish


For iOS:

Right-click the Android Studio>(project folder)>ios/Runner/Assets.xcassets folder, select Open in>Finder

Once revealed, delete (cmd+backspace) the Assets.xcassets from the runner folder 

Once deleted, Select the Assets.xcassets folder from the AppIcon.zip file and drag to the destination Runner folder of the project


Other Option : Using flutter_launcher_icons package

Create icon

Create folder for the new icon in the project directory e.g. (project folder)/assets/icon

Add icon to the Android Studio>(project folder)>/assets/icon/ folder

Then in (project folder)/pubspec.yaml add the following (except the greyed out lines ie flutter_test)

dev_dependencies:
flutter_launcher_icons: ^0.9.2

flutter_test:
sdk: flutter


flutter_icons:
android: true
ios: true
image_path: "assets/icon/icon.png"

Replace "/assets/icon/icon.png" with the name of your icon

Save edited pubspec.yaml.

Execute Pub get from Android studio (when in pubspec.yaml editor) or via terminal type

> flutter pub get

Running "flutter pub get" in flutter_app...                       739ms

Process finished with exit code 0

Open Terminal from Android Studio (Option+F12) or from Android Studio / Tool Window, click Terminal
Execute the following command:

> flutter pub run flutter_launcher_icons:main

  ════════════════════════════════════════════
     FLUTTER LAUNCHER ICONS (v0.9.1)                               
  ════════════════════════════════════════════
  
• Creating default icons Android
• Overwriting the default Android launcher icon with a new icon

WARNING: Icons with alpha channel are not allowed in the Apple App Store.
Set "remove_alpha_ios: true" to remove it.

• Overwriting default iOS launcher icon with new icon

✓ Successfully generated launcher icons

(app project folder)/(app name) took 6s 
Done.





Even on newly created Flutter v2.5 project getting "A splash screen was provided to Flutter, but this is deprecated. See flutter.dev/go/android-splash-migration for migration steps.'

Even on a newly created project using latest Flutter v2.5.1 and/or latest Android Studio Arctic Fox 2020.3.1 Patch 2

Running a project will show the following warning 

A splash screen was provided to Flutter, but this is deprecated. See flutter.dev/go/android-splash-migration for migration steps. 

> flutter run
Using hardware rendering with device AOSP on IA Emulator. If you notice graphics
artifacts, consider enabling software rendering with
"--enable-software-rendering".
Launching lib/main.dart on AOSP on IA Emulator in debug mode...
Running Gradle task 'assembleDebug'...                             33.6s
✓  Built build/app/outputs/flutter-apk/app-debug.apk.
Installing build/app/outputs/flutter-apk/app.apk...                 3.5s
W/FlutterActivityAndFragmentDelegate(12509): A splash screen was provided to Flutter, but this is deprecated. See flutter.dev/go/android-splash-migration for migration steps.
D/eglCodecCommon(12509): setVertexArrayObject: set vao to 0 (0) 1 0
Syncing files to device AOSP on IA Emulator...                     179ms
Flutter run key commands.
r Hot reload. 🔥🔥🔥
R Hot restart.
h List all available interactive commands.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).
💪 Running with sound null safety 💪
An Observatory debugger and profiler on AOSP on IA Emulator is available at:
http://127.0.0.1:62763/lMsd46bI0HBdfc=/
The Flutter DevTools debugger and profiler on AOSP on IA Emulator is available
at: http://127.0.0.1:9101?uri=http://127.0.0.1:62763/lMsd46bI0HBdfc=/


Solution:

Remove the following code from (project folder)/android/app/src/main/AndroidManifest.xml

<meta-data
android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@drawable/launch_background"
/>

From flutter.dev site:

This is no longer needed and is deprecated – Flutter now automatically keeps the Android launch screen displayed until Flutter has drawn the first frame. Developers should instead remove usage of these APIs.