Using Appium testing for mobile applications. The app is written in react-native.
I'm having trouble locating elements on the mobile screen. When using uiAutomatorViewer to view the element details, no class name are displayed for every element, so there is no way of locating the elements. It seems like only the index of the elements are being displayed.
Is that the developer's mistake, or is there a way of locating the elements that I need to know?
This is the xml of the page. You can roughly look through it and you can tell there's no additional information:
<?xml version="1.0" encoding="UTF-8"?>
<hierarchy rotation="0">
<node index="0" text="" resource-id="" class="android.widget.FrameLayout" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1440,2792]">
<node index="0" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1440,2792]">
<node index="0" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1440,2792]">
<node index="0" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,168][231,256]">
<node index="0" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,168][231,256]" />
</node>
<node index="1" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[1209,168][1440,256]">
<node index="0" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[1209,168][1440,256]" />
</node>
<node index="2" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[56,326][119,391]" />
<node index="3" text="Find someone passionate about ..." resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[154,288][1332,428]" />
<node index="4" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" scrollable="true" long-clickable="false" password="false" selected="false" bounds="[0,574][1440,1104]">
<node index="3" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,617][347,1019]">
<node index="0" text="Leon" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,642][171,759]" />
<node index="1" text="So" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[8,759][110,863]" />
<node index="2" text="READING" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,895][248,993]" />
</node>
<node index="4" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[400,592][1041,1039]">
<node index="0" text="Tim" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[629,620][813,750]" />
<node index="1" text="Choy" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[604,750][837,866]" />
<node index="2" text="POTATOES" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[485,901][956,1010]" />
</node>
<node index="5" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[1094,617][1440,1019]">
<node index="0" text="Kevin" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[1252,642][1440,759]" />
<node index="1" text="Feng" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[1280,759][1440,863]" />
<node index="2" text="DOGS" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[1263,895][1440,993]" />
</node>
</node>
<node index="5" text="New Matches" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[35,484][1440,575]" />
<node index="6" text="Daily Feed" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[35,1104][1440,1194]" />
<node index="7" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" scrollable="true" long-clickable="false" password="false" selected="false" bounds="[0,1195][1440,2792]">
<node index="0" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[258,1465][1185,2451]">
<node index="0" text="Paul" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[565,1672][878,1861]" />
<node index="1" text="Deng" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[557,1861][886,2029]" />
<node index="2" text="SOCCER" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[440,2061][1003,2228]" />
</node>
<node index="1" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[235,1373][1202,2402]">
<node index="0" text="Joy" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[582,1589][855,1787]" />
<node index="1" text="Xiao" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[575,1787][864,1961]" />
<node index="2" text="BUNNIES" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[391,1995][1047,2170]" />
</node>
<node index="2" text="" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[216,1279][1224,2351]">
<node index="0" text="Henry" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[476,1504][965,1710]" />
<node index="1" text="Last" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[583,1710][857,1892]" />
<node index="2" text="FRISBEE" resource-id="" class="" package="me.passionfruit.app.android" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[416,1927][1024,2109]" />
</node>
</node>
</node>
</node>
</node>
</hierarchy>
From what I can see from your screenshot there is index attribute which you can use for identifying your element so you could try the following XPath selector
//*[#index='1']
however it's hard to say whether it will be a unique match or not, going forward consider executing Source command and pasting the UI hierarchy instead of photo of your screen.
Another approaches to view application DOM structure are:
Appium Desktop
Android Device Monitor
Android Studio Layout Inspector
Appium Studio - this one provides Copy Unique XPath feature
Related
ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability.
Getting this issue while uploading the new application which is developed in the ionic.
I tried so many solutions which are available but none of the work.
Also tried https://cordova.apache.org/howto/2020/03/18/wkwebviewonly.html this one but still getting error.
Configuration :
Ionic:
Ionic CLI : 5.4.16 (/usr/local/lib/node_modules/ionic)
Ionic Framework : ionic-angular 3.9.2 #ionic/app-scripts : 3.2.1
Cordova:
Cordova CLI : 8.1.2 (cordova-lib#8.1.1) Cordova Platforms
: android 6.4.0, ios 5.1.1 Cordova Plugins :
cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview
4.1.0, (and 9 other plugins)
Application contains pdf and did some operation on pdf.
PDF is static which is upload in assets folder.
Also attached package.json file.
{
"name": "MyPdfProject",
"version": "0.0.1",
"author": "Ionic Framework",
"homepage": "http://ionicframework.com/",
"private": true,
"scripts": {
"start": "ionic-app-scripts serve",
"clean": "ionic-app-scripts clean",
"build": "ionic-app-scripts build",
"lint": "ionic-app-scripts lint"
},
"dependencies": {
"#angular/animations": "^5.2.11",
"#angular/common": "5.2.11",
"#angular/compiler": "5.2.11",
"#angular/compiler-cli": "5.2.11",
"#angular/core": "5.2.11",
"#angular/forms": "5.2.11",
"#angular/http": "5.2.11",
"#angular/platform-browser": "5.2.11",
"#angular/platform-browser-dynamic": "5.2.11",
"#ionic-native/app-preferences": "^4.18.0",
"#ionic-native/call-number": "^4.18.0",
"#ionic-native/core": "~4.17.0",
"#ionic-native/file": "^5.0.0",
"#ionic-native/in-app-browser": "^4.20.0",
"#ionic-native/ionic-webview": "^5.29.0",
"#ionic-native/mobile-accessibility": "^4.19.0",
"#ionic-native/native-storage": "^4.18.0",
"#ionic-native/splash-screen": "^4.17.0",
"#ionic-native/status-bar": "~4.17.0",
"#ionic/angular": "^4.11.10",
"#ionic/storage": "^2.2.0",
"call-number": "1.0.1",
"cordova-android": "7.1.4",
"cordova-ios": "^4.5.5",
"cordova-plugin-app-preferences": "^0.99.3",
"cordova-plugin-device": "^2.0.2",
"cordova-plugin-file": "^6.0.1",
"cordova-plugin-inappbrowser": "^4.1.0",
"cordova-plugin-ionic-keyboard": "^2.1.3",
"cordova-plugin-ionic-webview": "^5.0.0",
"cordova-plugin-network-information": "git+https://github.com/apache/cordova-plugin-network-information.git",
"cordova-plugin-splashscreen": "~5.0.3",
"cordova-plugin-statusbar": "^2.4.2",
"cordova-plugin-whitelist": "^1.3.3",
"cordova-sqlite-storage": "^3.0.0",
"es6-promise-plugin": "4.2.2",
"ionic-angular": "3.9.2",
"ionicons": "3.0.0",
"mx.ferreyra.callnumber": "~0.0.2",
"pdfjs-dist": "^2.0.943",
"phonegap-plugin-mobile-accessibility": "^1.0.5",
"rxjs": "5.5.11",
"sw-toolbox": "3.6.0",
"zone.js": "0.8.26"
},
"devDependencies": {
"#ionic/app-scripts": "3.2.1",
"#ionic/lab": "1.0.16",
"typescript": "~2.6.2"
},
"description": "An Ionic project",
"cordova": {
"plugins": {
"cordova-plugin-whitelist": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-device": {},
"cordova-plugin-ionic-keyboard": {},
"cordova-plugin-app-preferences": {},
"mx.ferreyra.callnumber": {},
"phonegap-plugin-mobile-accessibility": {},
"cordova-plugin-file": {},
"cordova-sqlite-storage": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-ionic-webview": {},
"cordova-plugin-inappbrowser": {}
},
"platforms": [
"ios"
]
}
}
config.xml
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.example.pdf" version="1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>MyPdfProject</name>
<description>An awesome Ionic/Cordova app.</description>
<author email="hi#ionicframework" href="http://ionicframework.com/">Ionic Framework Team</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<preference name="ScrollEnabled" value="false" />
<preference name="android-minSdkVersion" value="19" />
<preference name="BackupWebStorage" value="none" />
<preference name="AutoHideSplashScreen" value="false" />
<preference name="SplashScreenDelay" value="1200" />
<preference name="FadeSplashScreenDuration" value="300" />
<preference name="SplashScreen" value="screen" />
<preference name="ShowSplashScreen" value="true" />
<preference name="ShowSplashScreenSpinner" value="true" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="StatusBarStyle" value="lightcontent" />
<preference name="WKWebViewOnly" value="true" />
<preference name="Hostname" value="AQHA 2021 Rulebook" />
<preference name="Scheme" value="https" />
<platform name="android">
<allow-intent href="market:*" />
<icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
<icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
<icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
<icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
<icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
<icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
<splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
<splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
<splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
<splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
<splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
<splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
<splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
<splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
<splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
<splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
<splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
<splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
<icon height="57" src="resources/ios/icon/icon.png" width="57" />
<icon height="114" src="resources/ios/icon/icon#2x.png" width="114" />
<icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
<icon height="80" src="resources/ios/icon/icon-40#2x.png" width="80" />
<icon height="120" src="resources/ios/icon/icon-40#3x.png" width="120" />
<icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
<icon height="100" src="resources/ios/icon/icon-50#2x.png" width="100" />
<icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
<icon height="120" src="resources/ios/icon/icon-60#2x.png" width="120" />
<icon height="180" src="resources/ios/icon/icon-60#3x.png" width="180" />
<icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
<icon height="144" src="resources/ios/icon/icon-72#2x.png" width="144" />
<icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
<icon height="152" src="resources/ios/icon/icon-76#2x.png" width="152" />
<icon height="167" src="resources/ios/icon/icon-83.5#2x.png" width="167" />
<icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
<icon height="58" src="resources/ios/icon/icon-small#2x.png" width="58" />
<icon height="87" src="resources/ios/icon/icon-small#3x.png" width="87" />
<icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
<splash height="1136" src="resources/ios/splash/Default-568h#2x~iphone.png" width="640" />
<splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
<splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
<splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
<splash height="1536" src="resources/ios/splash/Default-Landscape#2x~ipad.png" width="2048" />
<splash height="2048" src="resources/ios/splash/Default-Landscape#~ipadpro.png" width="2732" />
<splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
<splash height="2048" src="resources/ios/splash/Default-Portrait#2x~ipad.png" width="1536" />
<splash height="2732" src="resources/ios/splash/Default-Portrait#~ipadpro.png" width="2048" />
<splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
<splash height="960" src="resources/ios/splash/Default#2x~iphone.png" width="640" />
<splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
<splash height="2732" src="resources/ios/splash/Default#2x~universal~anyany.png" width="2732" />
</platform>
<plugin name="cordova-plugin-whitelist" spec="~1.3.3" />
<plugin name="cordova-plugin-statusbar" spec="~2.4.2" />
<plugin name="cordova-plugin-device" spec="^2.0.2" />
<plugin name="cordova-plugin-ionic-keyboard" spec="^2.0.5" />
<plugin name="cordova-plugin-app-preferences" spec="^0.99.3" />
<plugin name="mx.ferreyra.callnumber" spec="~0.0.2" />
<plugin name="phonegap-plugin-mobile-accessibility" spec="~1.0.5-dev" />
<plugin name="cordova-plugin-file" spec="~6.0.1" />
<plugin name="cordova-sqlite-storage" spec="~3.0.0" />
<plugin name="cordova-plugin-splashscreen" spec="~5.0.3" />
<plugin name="cordova-plugin-ionic-webview" spec="^5.0.0" />
<plugin name="cordova-plugin-inappbrowser" spec="^4.1.0" />
<engine name="ios" spec="^4.5.5" />
</widget>
So, how can I solve this issue. Please help.
npm uninstall #ionic-native/ionic-webview
ionic cordova plugin rm cordova-plugin-ionic-webview
And install
ionic cordova plugin add cordova-plugin-ionic-webview#5.0.0
npm install #ionic-native/ionic-webview#5.29.0
Add config.xml
<preference name="WKWebViewOnly" value="true" />
<preference name="Hostname" value="yourappname" />
<preference name="Scheme" value="https" />
Platform remove and add
cordova platform rm android (or ios)
cordova platform add android (or ios)
If you are using plugins from this list, you should update or uninstall them.
https://ionicframework.com/blog/understanding-itms-90809-uiwebview-api-deprecation/
It looks like you are using an old version of the cordova CLI and old version of cordova-ios.
Upgrade that to the latest version (where WKWebView is already integrated)
Then if you still have a problem with this, use this plugin:
cordova-plugin-wkwebview-file-xhr
https://www.npmjs.com/package/cordova-plugin-wkwebview-file-xhr
This worked for me, and I had the same problem as you..
Good Luck!
Basically, I followed these steps to solve the issue.
Step 1: I installed the WKWebView plugin: ionic's.
Step 2: Add <preference name="WKWebViewOnly" value="true" /> to your config.xml file.
Step 3: Update the InAppBrowser plugin.
Step 4: Run cordova prepare ios to apply the changes.
5.1.0 has a conditional compile-time flag that disables UIWebView. This is an initial fix to prevent the Apple warning from being triggered.
6.0.0 will remove the entirety of UIWebView. This is a breaking change with more changes needed, so it’ll be released. As of January 2020, no ETA for release is known but version 5.1.0 will work just fine.
Follow these steps and the issue will resolve and application will successfully upload on the app store.
Okay, I know that there are many similar problems out there, but I am facing a little different one.
Actually, when I build my Ionic3 app for iOS using Xcode10, it builds perfectly but when the app launches the first time, it shows the splash screen for a long time and then the white screen stays for infinite time, but if I minimize the app and open again, I see that everything is loaded well and app is working fine(I am facing this both on iOS simulator and on device).
This is happening every time I start the app after closing its task. But after closing it(not to clear its task) and opening it again, it works fine and the white screen goes away.
Though there is no good white screen related solution out there and I tried almost everything but the problem is still there. Please help me.
PS: The same app works perfectly in Android in both debug and production builds(on simulator as well as on device).
My package.json:
{
"name": "newApp",
"version": "0.0.1",
"author": "Ionic Framework",
"homepage": "http://ionicframework.com/",
"private": true,
"scripts": {
"clean": "ionic-app-scripts clean",
"build": "ionic-app-scripts build",
"lint": "ionic-app-scripts lint",
"ionic:build": "ionic-app-scripts build",
"ionic:serve": "ionic-app-scripts serve"
},
"dependencies": {
"#angular/common": "4.1.3",
"#angular/compiler": "4.1.3",
"#angular/compiler-cli": "4.1.3",
"#angular/core": "4.1.3",
"#angular/forms": "4.1.3",
"#angular/http": "4.1.3",
"#angular/platform-browser": "4.1.3",
"#angular/platform-browser-dynamic": "4.1.3",
"#ionic-native/app-version": "^4.13.0",
"#ionic-native/core": "3.12.1",
"#ionic-native/fcm": "^4.5.2",
"#ionic-native/google-analytics": "^4.13.0",
"#ionic-native/push": "4.0.1",
"#ionic-native/splash-screen": "3.12.1",
"#ionic-native/status-bar": "3.12.1",
"#ionic/storage": "2.0.1",
"#types/lodash": "^4.14.91",
"cordova-android": "^7.1.3",
"cordova-ios": "4.5.5",
"cordova-plugin-app-version": "^0.1.9",
"cordova-plugin-device": "^1.1.4",
"cordova-plugin-google-analytics": "^1.8.6",
"cordova-plugin-splashscreen": "^4.0.3",
"cordova-plugin-statusbar": "^2.2.2",
"cordova-plugin-whitelist": "^1.3.3",
"datepicker-ionic2": "^2.6.2",
"highcharts": "^4.2.6",
"ion2-calendar": "^2.2.0",
"ionic-angular": "3.6.1",
"ionic-plugin-keyboard": "^2.2.1",
"ionic-select-searchable": "^2.8.2",
"ionicons": "3.0.0",
"moment": "^2.22.2",
"rxjs": "5.4.0",
"sw-toolbox": "3.6.0",
"zone.js": "0.8.12"
},
"devDependencies": {
"#ionic/app-scripts": "2.1.4",
"typescript": "2.3.4"
},
"description": "An Ionic project",
"cordova": {
"plugins": {
"cordova-plugin-device": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-whitelist": {},
"ionic-plugin-keyboard": {},
"cordova-plugin-app-version": {},
"cordova-plugin-google-analytics": {
"GMS_VERSION": "11.0.1"
}
},
"platforms": [
"android",
"ios"
]
}
}
My config.xml:
<?xml version='1.0' encoding='utf-8'?>
<widget id="newApp" version="24.6.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>New App</name>
<description>An Inventory App</description>
<author email="prashantjain.pro#gmail.com" href="">Prashant Jain</author>
<content src="index.html" />
<access origin="*" subdomains="true" />
<allow-navigation href="*" />
<allow-intent href="*" />
<allow-navigation href="http://ionic.local/*" />
<allow-navigation href="*://*vimeo.com" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<preference name="webviewbounce" value="false" />
<preference name="UIWebViewBounce" value="false" />
<preference name="DisallowOverscroll" value="true" />
<preference name="android-minSdkVersion" value="16" />
<preference name="BackupWebStorage" value="none" />
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="FadeSplashScreenDuration" value="300" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="SplashScreen" value="screen" />
<preference name="SplashScreenDelay" value="3000" />
<preference name="AutohideSplashScreen" value="false" />
<platform name="android">
<allow-intent href="market:*" />
<icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
<icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
<icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
<icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
<icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
<icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
<splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
<splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
<splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
<splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
<splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
<splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
<splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
<splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
<splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
<splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
<splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
<splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
<icon height="57" src="resources/ios/icon/icon.png" width="57" />
<icon height="114" src="resources/ios/icon/icon#2x.png" width="114" />
<icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
<icon height="80" src="resources/ios/icon/icon-40#2x.png" width="80" />
<icon height="120" src="resources/ios/icon/icon-40#3x.png" width="120" />
<icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
<icon height="100" src="resources/ios/icon/icon-50#2x.png" width="100" />
<icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
<icon height="120" src="resources/ios/icon/icon-60#2x.png" width="120" />
<icon height="180" src="resources/ios/icon/icon-60#3x.png" width="180" />
<icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
<icon height="144" src="resources/ios/icon/icon-72#2x.png" width="144" />
<icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
<icon height="152" src="resources/ios/icon/icon-76#2x.png" width="152" />
<icon height="167" src="resources/ios/icon/icon-83.5#2x.png" width="167" />
<icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
<icon height="58" src="resources/ios/icon/icon-small#2x.png" width="58" />
<icon height="87" src="resources/ios/icon/icon-small#3x.png" width="87" />
<splash height="1136" src="resources/ios/splash/Default-568h#2x~iphone.png" width="640" />
<splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
<splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
<splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
<splash height="1536" src="resources/ios/splash/Default-Landscape#2x~ipad.png" width="2048" />
<splash height="2048" src="resources/ios/splash/Default-Landscape#~ipadpro.png" width="2732" />
<splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
<splash height="2048" src="resources/ios/splash/Default-Portrait#2x~ipad.png" width="1536" />
<splash height="2732" src="resources/ios/splash/Default-Portrait#~ipadpro.png" width="2048" />
<splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
<splash height="960" src="resources/ios/splash/Default#2x~iphone.png" width="640" />
<splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
<splash height="2732" src="resources/ios/splash/Default#2x~universal~anyany.png" width="2732" />
<icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
</platform>
<plugin name="cordova-plugin-device" spec="^1.1.4" />
<plugin name="cordova-plugin-splashscreen" spec="^4.0.3" />
<plugin name="cordova-plugin-statusbar" spec="^2.2.2" />
<plugin name="ionic-plugin-keyboard" spec="^2.2.1" />
<plugin name="cordova-plugin-app-version" spec="^0.1.9" />
<plugin name="cordova-plugin-whitelist" spec="^1.3.3" />
<plugin name="cordova-plugin-google-analytics" spec="^1.8.6">
<variable name="GMS_VERSION" value="11.0.1" />
</plugin>
<engine name="android" spec="^7.1.3" />
<engine name="ios" spec="4.5.5" />
</widget>
Well, I figured out the exact problem. It was due to the plugins addition and removal while changing the iOS platform versions. Due to which device doesn't get ready before loading plugins.
To solve this, make sure you have added the latest iOS platform. Then start removing plugins one-by-one which are in the plugins folder.
To remove a plugin, write:
ionic cordova plugin rm <plugin-name>
If its npm module is there, then uninstall it as well:
npm uninstall --save <plugin-name>
Make sure you remove every plugin this way. Then, refresh your project or clean the project with:
npm run clean
Then, start adding the plugins again. Use:
ionic cordova plugin add <plugin-name>
npm install --save <plugin-name>
After this, just build the project again using:
ionic cordova build android --prod
And everything will work fine. :)
PS: If any problem comes up while building like, version 4 present, expected 3, then this means, your project is made for ionic3, so, in this case, you might have to change the #ionic-native/core and rxjs version, and then have to change the version from 4 to 3 in every metadata file in node_modules/#ionic-native.
Hope, this will solve your problem :)
We recently upgraded our TFS 2012 on premise server to TFS 2018.2. Things are mostly working but any project that had custom state/transitions will cause an error when trying to open the Backlogs page. The issue it is complaining about is related to Bugs. We replaced a "Complete" state with a state of Closed.
The error I get is :
TF400917: The current configuration is not valid for this feature. This feature cannot be used until you correct the configuration.
Learn about how to correct your configuration
Details about the validation error appear below:
The following element contains an error: RequirementBacklog/States. TF401098: This element defines the states for work items that appear on your backlog. The state configuration is incorrect. Each work item on this backlog must have one state with the type 'Complete'. The following work item type does not have any state with the type 'Complete': Bug.
Steps I have tried:
1) Using TFS Process Template editor in VS, I have change the Closed state to Complete. No success.
2) I have attempted to export the processconfig using witadmin. The file I get does not have any bug section at all. So using examples online, I attempt to add it but it complains about other sections in the file being incomplete. On a side note, if I export the process config and then immediately try to import it, it fails complaining about singleName not specified and other issues. I will attach the file I get when I export the file if it helps.
<?xml version="1.0" encoding="utf-8"?>
<ProjectProcessConfiguration>
<FeedbackRequestWorkItems category="Microsoft.FeedbackRequestCategory" pluralName="Feedback Requests">
<States>
<State type="InProgress" value="Active" />
<State type="Complete" value="Closed" />
</States>
</FeedbackRequestWorkItems>
<FeedbackResponseWorkItems category="Microsoft.FeedbackResponseCategory" pluralName="Feedback Responses">
<States>
<State type="InProgress" value="Active" />
<State type="Complete" value="Closed" />
</States>
</FeedbackResponseWorkItems>
<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Backlog items" workItemCountLimit="500">
<AddPanel>
<Fields>
<Field refname="System.Title" />
</Fields>
</AddPanel>
<Columns>
<Column width="400" refname="System.Title" />
<Column width="100" refname="System.State" />
<Column width="50" refname="Microsoft.VSTS.Scheduling.Effort" />
<Column width="200" refname="System.IterationPath" />
<Column width="200" refname="System.Tags" />
</Columns>
<States>
<State type="Proposed" value="New" />
<State type="Proposed" value="Approved" />
<State type="InProgress" value="Committed" />
<State type="Complete" value="Done" />
</States>
</RequirementBacklog>
<TaskBacklog category="Microsoft.TaskCategory" workItemCountLimit="500">
<AddPanel />
<Columns>
<Column width="50" refname="Microsoft.VSTS.Scheduling.Effort" />
<Column width="400" refname="System.Title" />
<Column width="100" refname="System.State" />
<Column width="100" refname="System.AssignedTo" />
<Column width="50" refname="Microsoft.VSTS.Scheduling.RemainingWork" />
</Columns>
<States>
<State type="Proposed" value="To Do" />
<State type="InProgress" value="In Progress" />
<State type="Complete" value="Done" />
</States>
</TaskBacklog>
<TypeFields>
<TypeField refname="Microsoft.VSTS.Common.Activity" type="Activity" />
<TypeField refname="Microsoft.VSTS.Common.BacklogPriority" type="Order" />
<TypeField refname="Microsoft.VSTS.Feedback.ApplicationLaunchInstructions" type="ApplicationLaunchInstructions" />
<TypeField refname="Microsoft.VSTS.Feedback.ApplicationStartInformation" type="ApplicationStartInformation" />
<TypeField refname="Microsoft.VSTS.Feedback.ApplicationType" type="ApplicationType">
<TypeFieldValues>
<TypeFieldValue type="ClientApp" value="Client application" />
<TypeFieldValue type="RemoteMachine" value="Remote machine" />
<TypeFieldValue type="WebApp" value="Web application" />
</TypeFieldValues>
</TypeField>
<TypeField refname="Microsoft.VSTS.Scheduling.Effort" type="Effort" />
<TypeField format="{0} h" refname="Microsoft.VSTS.Scheduling.RemainingWork" type="RemainingWork" />
<TypeField refname="System.AreaPath" type="Team" />
</TypeFields>
<Weekends>
<DayOfWeek>Sunday</DayOfWeek>
<DayOfWeek>Saturday</DayOfWeek>
</Weekends>
<Properties>
<Property name="BugsBehavior" value="Off" />
</Properties>
</ProjectProcessConfiguration>
I am new to the 2018 world and can't seem to solve this issue any suggestions would be helpful.
Adding my bug work item definition:
<?xml version="1.0" encoding="utf-8"?>
<witd:WITD application="Work item type editor" version="1.0" xmlns:witd="http://schemas.microsoft.com/VisualStudio/2008/workitemtracking/typedef">
<WORKITEMTYPE name="Bug">
<DESCRIPTION>Describes a divergence between required and actual behavior, and tracks the work done to correct the defect and verify the correction.</DESCRIPTION>
<FIELDS>
<FIELD name="Iteration Path" refname="System.IterationPath" type="TreePath" reportable="dimension" />
<FIELD name="Iteration ID" refname="System.IterationId" type="Integer" />
<FIELD name="External Link Count" refname="System.ExternalLinkCount" type="Integer" />
<FIELD name="Team Project" refname="System.TeamProject" type="String" reportable="dimension" />
<FIELD name="Hyperlink Count" refname="System.HyperLinkCount" type="Integer" />
<FIELD name="Attached File Count" refname="System.AttachedFileCount" type="Integer" />
<FIELD name="Node Name" refname="System.NodeName" type="String" />
<FIELD name="Area Path" refname="System.AreaPath" type="TreePath" reportable="dimension" />
<FIELD name="Revised Date" refname="System.RevisedDate" type="DateTime" reportable="detail" />
<FIELD name="Changed Date" refname="System.ChangedDate" type="DateTime" reportable="dimension" />
<FIELD name="ID" refname="System.Id" type="Integer" reportable="dimension" />
<FIELD name="Area ID" refname="System.AreaId" type="Integer" />
<FIELD name="Authorized As" refname="System.AuthorizedAs" type="String" syncnamechanges="true" />
<FIELD name="Title" refname="System.Title" type="String" reportable="dimension">
<REQUIRED />
</FIELD>
<FIELD name="State" refname="System.State" type="String" reportable="dimension" />
<FIELD name="Authorized Date" refname="System.AuthorizedDate" type="DateTime" />
<FIELD name="Watermark" refname="System.Watermark" type="Integer" />
<FIELD name="Rev" refname="System.Rev" type="Integer" reportable="dimension" />
<FIELD name="Changed By" refname="System.ChangedBy" type="String" syncnamechanges="true" reportable="dimension" />
<FIELD name="Reason" refname="System.Reason" type="String" reportable="dimension" />
<FIELD name="Assigned To" refname="System.AssignedTo" type="String" syncnamechanges="true" reportable="dimension">
<ALLOWEXISTINGVALUE />
<VALIDUSER />
</FIELD>
<FIELD name="Work Item Type" refname="System.WorkItemType" type="String" reportable="dimension" />
<FIELD name="Created Date" refname="System.CreatedDate" type="DateTime" reportable="dimension" />
<FIELD name="Created By" refname="System.CreatedBy" type="String" syncnamechanges="true" reportable="dimension" />
<FIELD name="Description" refname="System.Description" type="HTML" />
<FIELD name="History" refname="System.History" type="History" />
<FIELD name="Related Link Count" refname="System.RelatedLinkCount" type="Integer" />
<FIELD name="Tags" refname="System.Tags" type="PlainText" />
<FIELD name="Board Column" refname="System.BoardColumn" type="String" reportable="dimension" />
<FIELD name="Board Column Done" refname="System.BoardColumnDone" type="Boolean" reportable="dimension" />
<FIELD name="Board Lane" refname="System.BoardLane" type="String" reportable="dimension" />
<FIELD name="Remaining Work" refname="Microsoft.VSTS.Scheduling.RemainingWork" type="Double" reportable="measure" formula="sum" />
<FIELD name="Backlog Priority" refname="Microsoft.VSTS.Common.BacklogPriority" type="Double" reportable="detail" />
<FIELD name="Integration Build" refname="Microsoft.VSTS.Build.IntegrationBuild" type="String" reportable="dimension">
<SUGGESTEDVALUES expanditems="true">
<LISTITEM value="<None>" />
</SUGGESTEDVALUES>
<SUGGESTEDVALUES expanditems="true" filteritems="excludegroups">
<GLOBALLIST name="Builds - WHCRT" />
</SUGGESTEDVALUES>
</FIELD>
<FIELD name="Closed Date" refname="Microsoft.VSTS.Common.ClosedDate" type="DateTime" reportable="dimension">
<WHENNOTCHANGED field="System.State">
<READONLY />
</WHENNOTCHANGED>
</FIELD>
<FIELD name="System Info" refname="Microsoft.VSTS.TCM.SystemInfo" type="HTML" />
<FIELD name="Repro Steps" refname="Microsoft.VSTS.TCM.ReproSteps" type="HTML" />
<FIELD name="Effort" refname="Microsoft.VSTS.Scheduling.Effort" type="Double" reportable="measure" formula="sum" />
<FIELD name="Acceptance Criteria" refname="Microsoft.VSTS.Common.AcceptanceCriteria" type="HTML" />
<FIELD name="Severity" refname="Microsoft.VSTS.Common.Severity" type="String" reportable="dimension">
<ALLOWEDVALUES expanditems="true">
<LISTITEM value="1 - Critical" />
<LISTITEM value="2 - High" />
<LISTITEM value="3 - Medium" />
<LISTITEM value="4 - Low" />
</ALLOWEDVALUES>
<DEFAULT from="value" value="3 - Medium" />
</FIELD>
<FIELD name="Found In" refname="Microsoft.VSTS.Build.FoundIn" type="String" reportable="dimension">
<SUGGESTEDVALUES expanditems="true">
<LISTITEM value="<None>" />
</SUGGESTEDVALUES>
<SUGGESTEDVALUES expanditems="true" filteritems="excludegroups">
<GLOBALLIST name="Builds - WHCRT" />
</SUGGESTEDVALUES>
</FIELD>
</FIELDS>
<WORKFLOW>
<STATES>
<STATE value="Closed" />
<STATE value="In Progress" />
<STATE value="In-Progress - QA" />
<STATE value="New">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<EMPTY />
</FIELD>
</FIELDS>
</STATE>
<STATE value="QA Failed" />
<STATE value="Ready For QA" />
</STATES>
<TRANSITIONS>
<TRANSITION from="" to="New">
<REASONS>
<DEFAULTREASON value="New defect reported" />
<REASON value="Build Failure" />
</REASONS>
</TRANSITION>
<TRANSITION from="In-Progress - QA" to="QA Failed">
<REASONS>
<DEFAULTREASON value="Bug not resolved, see Notes" />
</REASONS>
<FIELDS>
<FIELD refname="System.AssignedTo">
<ALLOWEXISTINGVALUE />
<EMPTY />
</FIELD>
</FIELDS>
</TRANSITION>
<TRANSITION from="Ready For QA" to="In-Progress - QA">
<REASONS>
<DEFAULTREASON value="Testing Bug" />
</REASONS>
<FIELDS>
<FIELD refname="System.AssignedTo">
<COPY from="currentuser" />
</FIELD>
</FIELDS>
</TRANSITION>
<TRANSITION from="In-Progress - QA" to="Closed">
<REASONS>
<DEFAULTREASON value="Fix verified">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<COPY from="clock" />
</FIELD>
</FIELDS>
</DEFAULTREASON>
<REASON value="Confirmed not a bug">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<COPY from="clock" />
</FIELD>
</FIELDS>
</REASON>
</REASONS>
</TRANSITION>
<TRANSITION from="New" to="Closed">
<REASONS>
<DEFAULTREASON value="Not a Bug">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<COPY from="clock" />
</FIELD>
</FIELDS>
</DEFAULTREASON>
<REASON value="Old System - Closing bug">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<COPY from="clock" />
</FIELD>
</FIELDS>
</REASON>
<REASON value="Oops - Duplicate" />
</REASONS>
</TRANSITION>
<TRANSITION from="In-Progress - QA" to="Ready For QA">
<REASONS>
<DEFAULTREASON value="Unable to Test for now">
<FIELDS>
<FIELD refname="System.AssignedTo">
<ALLOWEXISTINGVALUE />
<EMPTY />
</FIELD>
</FIELDS>
</DEFAULTREASON>
</REASONS>
</TRANSITION>
<TRANSITION from="Closed" to="New">
<REASONS>
<DEFAULTREASON value="Re-Open Bug">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<EMPTY />
</FIELD>
</FIELDS>
</DEFAULTREASON>
</REASONS>
</TRANSITION>
<TRANSITION from="In Progress" to="Closed">
<REASONS>
<DEFAULTREASON value="Invalid Bug - Verified with Business">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<COPY from="clock" />
</FIELD>
</FIELDS>
</DEFAULTREASON>
</REASONS>
</TRANSITION>
<TRANSITION from="In Progress" to="New">
<REASONS>
<DEFAULTREASON value="Moved back to New">
<FIELDS>
<FIELD refname="System.AssignedTo">
<ALLOWEXISTINGVALUE />
<EMPTY />
</FIELD>
</FIELDS>
</DEFAULTREASON>
</REASONS>
</TRANSITION>
<TRANSITION from="New" to="In Progress">
<REASONS>
<DEFAULTREASON value="Dev working bug">
<FIELDS>
<FIELD refname="System.AssignedTo">
<COPY from="currentuser" />
</FIELD>
</FIELDS>
</DEFAULTREASON>
</REASONS>
</TRANSITION>
<TRANSITION from="QA Failed" to="In Progress">
<REASONS>
<DEFAULTREASON value="Dev working bug">
<FIELDS>
<FIELD refname="System.AssignedTo">
<COPY from="currentuser" />
</FIELD>
</FIELDS>
</DEFAULTREASON>
</REASONS>
</TRANSITION>
<TRANSITION from="In Progress" to="Ready For QA">
<REASONS>
<DEFAULTREASON value="Issue Fixed, Ready for QA" />
<REASON value="Can't Reproduce" />
<REASON value="Not a Bug, won't fix" />
</REASONS>
<FIELDS>
<FIELD refname="System.AssignedTo">
<ALLOWEXISTINGVALUE />
<EMPTY />
</FIELD>
</FIELDS>
</TRANSITION>
</TRANSITIONS>
</WORKFLOW>
<FORM>
<Layout HideControlBorders="true" HideReadOnlyEmptyFields="true">
<Group Margin="(4,0,0,0)">
<Column PercentWidth="100">
<Control FieldName="System.Title" Type="FieldControl" LabelPosition="Top" ControlFontSize="large" EmptyText="<Enter title here>" />
</Column>
</Group>
<Group Margin="(10,0,0,0)">
<Column PercentWidth="100">
<Control FieldName="System.IterationPath" Type="WorkItemClassificationControl" Label="Ite&ration" LabelPosition="Left" />
</Column>
</Group>
<Group Margin="(10,0,0,0)">
<Column PercentWidth="50">
<Group Label="Status">
<Column PercentWidth="100">
<Control FieldName="System.AssignedTo" Type="FieldControl" Label="Assi&gned To" LabelPosition="Left" />
<Control FieldName="System.State" Type="FieldControl" Label="Stat&e" LabelPosition="Left" />
<Control FieldName="System.Reason" Type="FieldControl" Label="Reason" LabelPosition="Left" />
</Column>
</Group>
</Column>
<Column PercentWidth="50">
<Group Label="Details">
<Column PercentWidth="100">
<Control FieldName="Microsoft.VSTS.Scheduling.Effort" Type="FieldControl" Label="Effort" LabelPosition="Left" />
<Control FieldName="Microsoft.VSTS.Scheduling.RemainingWork" Type="FieldControl" Label="Remaining Work" LabelPosition="Left" />
<Control FieldName="Microsoft.VSTS.Common.Severity" Type="FieldControl" Label="Severity" LabelPosition="Left" />
<Control FieldName="System.AreaPath" Type="WorkItemClassificationControl" Label="&Area" LabelPosition="Left" />
</Column>
</Group>
</Column>
</Group>
<Group>
<Column PercentWidth="50">
<TabGroup>
<Tab Label="Steps to Reproduce">
<Control FieldName="Microsoft.VSTS.TCM.ReproSteps" Type="HtmlFieldControl" Label="" LabelPosition="Top" Dock="Fill" MinimumSize="(100,200)" />
</Tab>
<Tab Label="System">
<Group Label="Build">
<Column PercentWidth="100">
<Control FieldName="Microsoft.VSTS.Build.FoundIn" Type="FieldControl" Label="Found In Build" LabelPosition="Left" />
<Control FieldName="Microsoft.VSTS.Build.IntegrationBuild" Type="FieldControl" Label="Integrated in Build" LabelPosition="Left" />
</Column>
</Group>
<Control FieldName="Microsoft.VSTS.TCM.SystemInfo" Type="HtmlFieldControl" Label="System Info" LabelPosition="Top" Dock="Fill" />
</Tab>
<Tab Label="Test Cases">
<Control Type="LinksControl" Label="" LabelPosition="Top" Name="TestedBy">
<LinksControlOptions>
<LinkColumns>
<LinkColumn RefName="System.Id" />
<LinkColumn RefName="System.WorkItemType" />
<LinkColumn RefName="System.Title" />
<LinkColumn RefName="System.AssignedTo" />
<LinkColumn RefName="System.State" />
</LinkColumns>
<WorkItemLinkFilters FilterType="include">
<Filter LinkType="Microsoft.VSTS.Common.TestedBy" FilterOn="forwardname" />
</WorkItemLinkFilters>
<ExternalLinkFilters FilterType="excludeAll" />
<WorkItemTypeFilters FilterType="include">
<Filter WorkItemType="Test Case" />
</WorkItemTypeFilters>
</LinksControlOptions>
</Control>
</Tab>
<Tab Label="Tasks">
<Control Type="LinksControl" Label="" LabelPosition="Top" Name="TaskLinks">
<LinksControlOptions>
<LinkColumns>
<LinkColumn RefName="System.Id" />
<LinkColumn RefName="System.WorkItemType" />
<LinkColumn RefName="System.Title" />
<LinkColumn RefName="System.AssignedTo" />
<LinkColumn RefName="System.State" />
</LinkColumns>
<WorkItemLinkFilters FilterType="include">
<Filter LinkType="System.LinkTypes.Hierarchy" FilterOn="forwardname" />
</WorkItemLinkFilters>
<ExternalLinkFilters FilterType="excludeAll" />
<WorkItemTypeFilters FilterType="include">
<Filter WorkItemType="Task" />
</WorkItemTypeFilters>
</LinksControlOptions>
</Control>
</Tab>
</TabGroup>
</Column>
<Column PercentWidth="50">
<TabGroup Margin="(5,0,0,0)">
<Tab Label="Acceptance Criteria">
<Control FieldName="Microsoft.VSTS.Common.AcceptanceCriteria" Type="HtmlFieldControl" Label="" LabelPosition="Top" Dock="Fill" MinimumSize="(100,200)" />
</Tab>
<Tab Label="History">
<Control FieldName="System.History" Type="WorkItemLogControl" Label="" LabelPosition="Top" Dock="Fill" />
</Tab>
<Tab Label="Links">
<Control Type="LinksControl" LabelPosition="Top" Name="GeneralLinks">
<LinksControlOptions>
<LinkColumns>
<LinkColumn RefName="System.Id" />
<LinkColumn RefName="System.WorkItemType" />
<LinkColumn RefName="System.Title" />
<LinkColumn RefName="System.AssignedTo" />
<LinkColumn RefName="System.State" />
<LinkColumn LinkAttribute="System.Links.Comment" />
</LinkColumns>
<WorkItemLinkFilters FilterType="includeAll" />
<ExternalLinkFilters FilterType="includeAll" />
<WorkItemTypeFilters FilterType="includeAll" />
</LinksControlOptions>
</Control>
</Tab>
<Tab Label="Attachments">
<Control Type="AttachmentsControl" LabelPosition="Top" />
</Tab>
</TabGroup>
</Column>
</Group>
</Layout>
<WebLayout ShowEmptyReadOnlyFields="false">
<SystemControls>
<Control Type="FieldControl" FieldName="System.Title" EmptyText="<Enter title here>" />
<Control Label="Ite&ration" Type="WorkItemClassificationControl" FieldName="System.IterationPath" />
<Control Label="Assi&gned To" Type="FieldControl" FieldName="System.AssignedTo" />
<Control Label="Stat&e" Type="FieldControl" FieldName="System.State" />
<Control Label="Reason" Type="FieldControl" FieldName="System.Reason" />
<Control Label="&Area" Type="WorkItemClassificationControl" FieldName="System.AreaPath" />
<Control Label="Links" Type="LinksControl" Name="Links" />
<Control Label="History" Type="WorkItemLogControl" FieldName="System.History" />
<Control Label="Attachments" Type="AttachmentsControl" Name="Attachments" />
</SystemControls>
<Page Label="Details" LayoutMode="FirstColumnWide">
<Section>
<Group Label="Steps to Reproduce">
<Control Type="HtmlFieldControl" FieldName="Microsoft.VSTS.TCM.ReproSteps" />
</Group>
<Group Label="System Info">
<Control Label="System Info" Type="HtmlFieldControl" FieldName="Microsoft.VSTS.TCM.SystemInfo" />
</Group>
<Group Label="Acceptance Criteria">
<Control Type="HtmlFieldControl" FieldName="Microsoft.VSTS.Common.AcceptanceCriteria" />
</Group>
</Section>
<Section>
<Group Label="Status">
<Control Label="Reason" Type="FieldControl" FieldName="System.Reason" />
</Group>
<Group Label="Build">
<Control Label="Found In Build" Type="FieldControl" FieldName="Microsoft.VSTS.Build.FoundIn" />
<Control Label="Integrated in Build" Type="FieldControl" FieldName="Microsoft.VSTS.Build.IntegrationBuild" />
</Group>
</Section>
<Section>
<Group Label="Development">
<Control Type="LinksControl" Name="Development">
<LinksControlOptions ViewMode="Dynamic" ZeroDataExperience="Development" ShowCallToAction="true">
<ListViewOptions GroupLinks="false"></ListViewOptions>
<LinkFilters>
<ExternalLinkFilter Type="Build" />
<ExternalLinkFilter Type="Integrated in build" />
<ExternalLinkFilter Type="Pull Request" />
<ExternalLinkFilter Type="Branch" />
<ExternalLinkFilter Type="Fixed in Commit" />
<ExternalLinkFilter Type="Fixed in Changeset" />
<ExternalLinkFilter Type="Source Code File" />
<ExternalLinkFilter Type="Found in build" />
</LinkFilters>
</LinksControlOptions>
</Control>
</Group>
<Group Label="Related Work">
<Control Type="LinksControl" Name="Related Work">
<LinksControlOptions>
<LinkFilters>
<WorkItemLinkFilter Type="System.LinkTypes.Duplicate-Reverse" />
<WorkItemLinkFilter Type="System.LinkTypes.Hierarchy-Reverse" />
<WorkItemLinkFilter Type="Microsoft.VSTS.Common.TestedBy-Forward" />
<WorkItemLinkFilter Type="Microsoft.VSTS.Common.TestedBy-Reverse" />
<WorkItemLinkFilter Type="System.LinkTypes.Hierarchy-Forward" />
<WorkItemLinkFilter Type="System.LinkTypes.Duplicate-Forward" />
<WorkItemLinkFilter Type="System.LinkTypes.Dependency" />
<WorkItemLinkFilter Type="System.LinkTypes.Related" />
</LinkFilters>
<Columns>
<Column Name="System.State" />
<Column Name="System.ChangedDate" />
<Column Name="System.Links.Comment" />
</Columns>
</LinksControlOptions>
</Control>
</Group>
<Group Label="Details">
<Control Label="Effort" Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.Effort" />
<Control Label="Remaining Work" Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.RemainingWork" />
<Control Label="Severity" Type="FieldControl" FieldName="Microsoft.VSTS.Common.Severity" />
</Group>
</Section>
</Page>
</WebLayout>
</FORM>
</WORKITEMTYPE>
</witd:WITD>
Did you do "enable new features" => In the config section (Projects) you can find this.
Also there is a guide from MS to your topic: https://learn.microsoft.com/en-us/vsts/work/customize/update-customized-process-template?view=tfs-2018
Try to add the following sample between <ProjectProcessConfiguration> </ProjectProcessConfiguration>
<BugWorkItems category="Microsoft.BugCategory" pluralName="Bugs" singularName="Bug">
<States>
<State type="Proposed" value="New" />
<State type="Proposed" value="Approved" />
<State type="InProgress" value="Committed" />
<State type="Complete" value="Done" />
</States>
</BugWorkItems>
I have a very strange problem. I try to use Spring Security (4.1.0) for user authentication on a WildFly Server. I tried WildFly 9 and 10.
My authentication data is stored after the login and Spring can use it, when it calls getAuthentication() of SecurityContext, but if I call
SecurityContextHolder.getContext().getAuthentication() it returns null. I already recognized, that I get a different SecurityContextImpl (different object ID).
I tried already to use the three different modes of SecurityContextHolder, but it made no difference.
My security.xml:
<?xml version="1.0" encoding="UTF-8"?>
<b:beans xmlns="http://www.springframework.org/schema/security"
xmlns:b="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<b:bean id="passwordEncoder"
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />
<b:bean id="accessDecisionManager"
class="org.springframework.security.access.vote.AffirmativeBased">
<b:property name="allowIfAllAbstainDecisions" value="false" />
<b:constructor-arg>
<b:list>
<b:bean class="tool.security.RightVoter" />
</b:list>
</b:constructor-arg>
</b:bean>
<authentication-manager alias="authenticationManager">
<authentication-provider ref="loginAuthenticationProvider" />
</authentication-manager>
<b:bean id="authenticationProcessingFilter"
class="tool.security.AuthenticationProcessingFilter">
<b:constructor-arg value="/processLogin" /> <!-- defaultFilterProcessesUrl -->
<b:property name="authenticationManager" ref="authenticationManager" />
<!-- <b:property name="filterProcessesUrl" value="/processLogin" /> -->
<b:property name="authenticationSuccessHandler">
<b:bean
class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler">
<b:property name="alwaysUseDefaultTargetUrl" value="true" />
<b:property name="defaultTargetUrl" value="/initLogin" />
</b:bean>
</b:property>
<b:property name="authenticationFailureHandler">
<b:bean class="tool.security.LoginFailureHandler">
<b:property name="redirectUrl" value="/login" />
</b:bean>
</b:property>
</b:bean>
<b:bean id="loginExistsFilter" class="tool.security.LoginExistsFilter">
<b:property name="loginUrl" value="/login" />
</b:bean>
<b:bean id="authenticationEntryPoint"
class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<b:constructor-arg value="/login" /> <!-- loginFormUrl -->
</b:bean>
<b:bean id="loginAuthenticationProvider"
class="tool.security.LoginAuthenticationProvider">
<b:property name="loginService" ref="loginService" />
</b:bean>
<b:bean id="loginService" class="tool.security.LoginServiceImpl">
<b:property name="userDao" ref="userDao" />
<b:property name="userTF" ref="userTF" />
<b:property name="passwordEncoder" ref="passwordEncoder" />
</b:bean>
<b:bean id="userDao" class="tool.user.impl.MongoUserDao"></b:bean>
<b:bean id="userTF" class="tool.user.UserTFImpl"></b:bean>
<http security="none" pattern="/css/**" />
<http security="none" pattern="/js/**" />
<http security="none" pattern="/login" />
<http security="none" pattern="/loginRedirect" />
<http security="none" pattern="/invalidbrowser" />
<http entry-point-ref="authenticationEntryPoint"
access-decision-manager-ref="accessDecisionManager">
<session-management invalid-session-url="/login?timeout=1"
session-fixation-protection="newSession">
<concurrency-control max-sessions="1"
error-if-maximum-exceeded="true" />
</session-management>
<custom-filter ref="authenticationProcessingFilter"
position="FORM_LOGIN_FILTER" />
<custom-filter ref="loginExistsFilter" before="FILTER_SECURITY_INTERCEPTOR" />
<csrf disabled="true" />
</http>
<global-method-security
access-decision-manager-ref="accessDecisionManager"
secured-annotations="enabled" />
I solved the problem by a movement of my call to SecurityContextHolder.getContext().getAuthentication(), it was first located in an included maven project, now it is in the same project and I have access to the same SecurityContextImpl instance.
Grails performance & memory leak question -
We have a v2.1.1 Grails 3-tier web application that runs on JDK 6.0 that can be deployed to Jboss 5.1 and WebSphere 8.5.5.4 environment.
We are currently having memory issue, the heap space gets exhausted after hours of Seleninum test runs.
With JavaMelody and YourKit tool, we found one of the big leak suspect is ‘ConcurrentHashMap’ but unable to trace it back to our own code,
and most of the suspects pointing to Grails framework libraries. Any tip?
We are looking for paid service to help us resolve this issue if anyone familiar in this area.
List of Grails plug-in we use. Does any of the listed plug-in you have experienced with memory issue in the past that we should avoid or replace:
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="web" name="GrailsWeb">
<configuration>
<webroots>
<root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/plugin-config-0.1.5/web-app" relative="/" />
<root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/json-rest-api-extended-0.2.6/grails-app/views" relative="/" />
<root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/web-app" relative="/" />
<root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/grails-app/views" relative="/" />
<root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/mail-1.0.1/grails-app/views" relative="/" />
<root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-1.8.0/web-app" relative="/" />
<root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/famfamfam-1.0.1/web-app" relative="/" />
<root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-ui-1.8.15/web-app" relative="/" />
</webroots>
<sourceRoots />
</configuration>
</facet>
<facet type="hibernate" name="Hibernate">
<configuration>
<datasource-map />
<naming-strategy-map />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/db-reverse-engineer-0.5">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/db-reverse-engineer-0.5/src/java" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/db-reverse-engineer-0.5/src/groovy" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/famfamfam-1.0.1">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/famfamfam-1.0.1/grails-app/taglib" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/grails-melody-1.58.0">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/grails-melody-1.58.0/src/groovy" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hawk-eventing-0.5.1">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hawk-eventing-0.5.1/src/java" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hawk-eventing-0.5.1/src/groovy" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hawk-eventing-0.5.1/grails-app/i18n" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hibernate-2.1.1">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hibernate-2.1.1/grails-app/i18n" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hibernate-hijacker-0.8.1">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hibernate-hijacker-0.8.1/src/java" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hibernate-hijacker-0.8.1/src/groovy" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/hibernate-hijacker-0.8.1/grails-app/i18n" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-1.8.0">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-1.8.0/src/groovy" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-1.8.0/grails-app/i18n" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-1.8.0/grails-app/services" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-1.8.0/grails-app/taglib" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-ui-1.8.15">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-ui-1.8.15/grails-app/i18n" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jquery-ui-1.8.15/grails-app/taglib" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/json-rest-api-extended-0.2.6">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/json-rest-api-extended-0.2.6/src/groovy" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/json-rest-api-extended-0.2.6/grails-app/controllers" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/json-rest-api-extended-0.2.6/grails-app/domain" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/json-rest-api-extended-0.2.6/grails-app/services" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jxl-0.54">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/jxl-0.54/src/groovy" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/mail-1.0.1">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/mail-1.0.1/src/groovy" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/mail-1.0.1/grails-app/i18n" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/mail-1.0.1/grails-app/services" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/mail-1.0.1/grails-app/taglib" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/multi-tenant-single-db-0.8.3">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/multi-tenant-single-db-0.8.3/src/java" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/multi-tenant-single-db-0.8.3/src/groovy" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/multi-tenant-single-db-0.8.3/grails-app/services" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/plugin-config-0.1.5">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/plugin-config-0.1.5/src/java" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/plugin-config-0.1.5/src/groovy" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/plugin-config-0.1.5/grails-app/i18n" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/quartz2-2.1.6.2">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/quartz2-2.1.6.2/src/java" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/quartz2-2.1.6.2/src/groovy" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/resources-1.2">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/resources-1.2/src/java" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/resources-1.2/src/groovy" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/resources-1.2/grails-app/i18n" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/resources-1.2/grails-app/taglib" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-mobile-0.5.1" />
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-core-1.2.7.3">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-core-1.2.7.3/src/java" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-core-1.2.7.3/src/groovy" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-core-1.2.7.3/grails-app/i18n" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-core-1.2.7.3/grails-app/services" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-core-1.2.7.3/grails-app/taglib" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/grails-app/i18n" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/grails-app/controllers" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/grails-app/domain" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/grails-app/services" isTestSource="false" />
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/spring-security-ui-0.2/grails-app/taglib" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/svn-1.0.0.M1">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/svn-1.0.0.M1/src/groovy" isTestSource="false" />
</content>
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/tomcat-2.1.1" />
<content url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/webxml-1.4.1">
<sourceFolder url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/webxml-1.4.1/src/groovy" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="grails-2.1.1" level="application" />
<orderEntry type="module-library" exported="">
<library name="Grails User Library (myApp-grailsPlugins)">
<CLASSES>
<root url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/svn-1.0.0.M1/lib" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.w3c.css/sac/jars/sac-1.3.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/net.sourceforge.cssparser/cssparser/jars/cssparser-0.9.5.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/net.sourceforge.nekohtml/nekohtml/jars/nekohtml-1.9.14.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/xerces/xercesImpl/jars/xercesImpl-2.9.1.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/net.sourceforge.htmlunit/htmlunit-core-js/jars/htmlunit-core-js-2.8.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.apache.james/apache-mime4j/jars/apache-mime4j-0.6.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.apache.httpcomponents/httpmime/jars/httpmime-4.0.1.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.apache.httpcomponents/httpcore/jars/httpcore-4.0.1.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.apache.httpcomponents/httpclient/jars/httpclient-4.0.1.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/xalan/xalan/jars/xalan-2.7.1.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/net.sourceforge.htmlunit/htmlunit/jars/htmlunit-2.8.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.seleniumhq.selenium/selenium-common/jars/selenium-common-2.0a7.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.seleniumhq.selenium/selenium-htmlunit-driver/jars/selenium-htmlunit-driver-2.0a7.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/log4j/log4j/jars/log4j-1.2.14.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/net.sourceforge.jexcelapi/jxl/jars/jxl-2.6.12.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.springframework/spring-test/jars/spring-test-3.1.0.RELEASE.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/javax.activation/activation/jars/activation-1.1.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/javax.mail/mail/jars/mail-1.4.3.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.quartz-scheduler/quartz/jars/quartz-2.1.6.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.springframework.mobile/spring-mobile-device/jars/spring-mobile-device-1.1.0.RELEASE.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.hibernate/jtidy/jars/jtidy-r8-20060801.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.hibernate/hibernate-tools/jars/hibernate-tools-3.6.0.CR1.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/freemarker/freemarker/jars/freemarker-2.3.8.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.springframework.security/spring-security-web/jars/spring-security-web-3.0.7.RELEASE.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.springframework.security/spring-security-core/jars/spring-security-core-3.0.7.RELEASE.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/mysql/mysql-connector-java/jars/mysql-connector-java-5.1.20.jar!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/spring-mobile/zips/spring-mobile-0.5.1.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/jxl/zips/jxl-0.54.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/hawk-eventing/zips/hawk-eventing-0.5.1.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/svn/zips/svn-1.0.0.M1.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/hibernate-hijacker/zips/hibernate-hijacker-0.8.1.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/multi-tenant-single-db/zips/multi-tenant-single-db-0.8.3.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/mail/zips/mail-1.0.1.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/spring-security-ui/zips/spring-security-ui-0.2.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/plugin-config/zips/plugin-config-0.1.5.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/quartz2/zips/quartz2-2.1.6.2.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/db-reverse-engineer/zips/db-reverse-engineer-0.5.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/jquery-ui/zips/jquery-ui-1.8.15.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/famfamfam/zips/famfamfam-1.0.1.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/spring-security-core/zips/spring-security-core-1.2.7.3.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/jquery/zips/jquery-1.8.0.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/hibernate/zips/hibernate-2.1.1.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/grails-json-rest-api-extended/zips/grails-json-rest-api-extended-0.2.6.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/tomcat/zips/tomcat-2.1.1.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/resources/zips/resources-1.2.zip!/" />
<root url="jar://$USER_HOME$/.grails/ivy-cache/org.grails.plugins/webxml/zips/webxml-1.4.1.zip!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
<jarDirectory url="file://$USER_HOME$/.grails/2.1.1/projects/myApp/plugins/svn-1.0.0.M1/lib" recursive="false" />
</library>
</orderEntry>
</component>
</module>
java.util.HashMap is not concurrent, so if you are using it in a Grails service or controller it is probably getting concurrent updates, which will cause a variety of problems, one of which may result in a memory leak when running on a server.
Try using one of the concurrent hash maps instead, such as java.util.concurrent.ConcurrentHashMap and see if the problem goes away.